Как я могу использовать тег liferay-ui:search-form, чтобы указать JSP, содержащий мою форму поиска?

#liferay #search-form

#лайфрей #поисковая форма

Вопрос:

Скажем, у меня есть JSP, view.jsp который использует базовый шаблон контейнера поиска Liferay:

 <liferay-ui:search-container>
    <liferay-ui:search-form page="..." />
    ...
</liferay-ui:search-container>
 

Допустим, файл view.jsp находится в папке docroot/ jsp, и в той же папке находится моя форма поиска, search.jsp . Теперь, когда я делаю:

 <liferay-ui:search-container>
    <liferay-ui:search-form page="search.jsp" />
    ...
</liferay-ui:search-container>
 

Страница отображается корректно, но без формы поиска. В консоли я замечаю ff. exception:

 08:11:01,937 ERROR [IncludeTag:154] java.lang.IllegalArgumentException: Path search.jsp does not start with a "/" character
        at org.apache.catalina.core.ApplicationContext.getRequestDispatcher(ApplicationContext.java:370)
        at org.apache.catalina.core.ApplicationContextFacade.getRequestDispatcher(ApplicationContextFacade.java:196)
        at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:173)
        at com.liferay.taglib.util.IncludeTag._doInclude(IncludeTag.java:223)
        at com.liferay.taglib.util.IncludeTag.doEndTag(IncludeTag.java:58)
        ...
 

Если я использую абсолютный путь следующим образом:

 <liferay-ui:search-container>
    <liferay-ui:search-form page="/jsp/search.jsp" />
    ...
</liferay-ui:search-container>
 

Происходит то же самое, но сейчас есть исключение:

 08:21:21,796 ERROR [IncludeTag:154] javax.servlet.ServletException: File amp;quot;/jsp/search.jspamp;quot; not found
        at org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:335)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
        at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:175)
        at com.liferay.taglib.util.IncludeTag._doInclude(IncludeTag.java:223)
        at com.liferay.taglib.util.IncludeTag.doEndTag(IncludeTag.java:58)
        ...
 

Кто-нибудь знает, как это исправить?

Ответ №1:

Если вы разрабатываете в среде плагина, вы должны использовать что-то подобное, чтобы включить свою форму поиска:

 <liferay-ui:search-form
        page="/search.jsp"
        searchContainer="<%= searchContainer %>"
        servletContext="<%= this.getServletConfig().getServletContext() %>"
        showAddButton="true" />
 

(Это TLD Liferay 6.0.6)