Я пытаюсь создать простой портлет для Liferay 5.2.2, используя Grails 1.2.1 с плагинами grails-portlets 0.7 и grails-portlets-liferay 0.2.
Я создал и развернул стандартный портлет (только что обновил заголовок, описание и т. Д.). Он развертывается правильно, и представление отображается правильно. Однако, когда я отправляю форму по умолчанию, которая находится в view.gsp
, она никогда не переходит к функции actionView
.
Вот соответствующие биты кода:
SearchPortlet.groovy
class SearchPortlet {
def title = 'Search'
def description = '''
A simple search portlet.
'''
def displayName = 'Search'
def supports = ['text/html':['view', 'edit', 'help']]
// Liferay server specific configurations
def liferay_display_category = 'Category'
def actionView = {
println "In action view"
}
def renderView = {
println "In render view"
//TODO Define render phase. Return the map of the variables bound to the view
['mykey':'myvalue']
}
...
}
view.gsp
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<div>
<h1>View Page</h1>
The map returned by renderView is passed in. Value of mykey: ${mykey}
<form action="${portletResponse.createActionURL()}">
<input type="submit" value="Submit"/>
</form>
</div>
Терминал tomcat печатает In render view
всякий раз, когда я просматриваю портлет, и после того, как я нажимаю кнопку submit . Он никогда не печатает оператор In action view
.
Есть идеи?
Обновление
Я включил ведение журнала, и это то, что я вижу всякий раз, когда нажимаю кнопку submit в портлете:
[localhost].[/gportlet] - servletPath=/Search, pathInfo=/invoke, queryString=null, name=null
[localhost].[/gportlet] - Path Based Include
portlets.GrailsDispatcherPortlet - DispatcherPortlet with name 'Search' received render request
portlets.GrailsDispatcherPortlet - Bound render request context to thread: com.liferay.portlet.RenderRequestImpl@7a158e
portlets.GrailsDispatcherPortlet - Testing handler map [org.codehaus.grails.portlets.GrailsPortletHandlerMapping@1f06283] in DispatcherPortlet with name 'Search'
portlets.GrailsDispatcherPortlet - Testing handler adapter [org.codehaus.grails.portlets.GrailsPortletHandlerAdapter@74f72b]
portlets.GrailsPortletHandlerAdapter - portlet.handleMinimised not set, proceeding with normal render
portlet.SearchPortlet - In render view
portlets.GrailsPortletHandlerAdapter - Couldn't resolve action view /search/null.gsp
portlets.GrailsPortletHandlerAdapter - Trying to render mode view /search/view.gsp
portlets.GrailsDispatcherPortlet - Setting portlet response content type to view-determined type [text/html;charset=ISO-8859-1]
[localhost].[/gportlet] - servletPath=/WEB-INF/servlet/view, pathInfo=null, queryString=null, name=null
[localhost].[/gportlet] - Path Based Include
portlets.GrailsDispatcherPortlet - Cleared thread-bound render request context: com.liferay.portlet.RenderRequestImpl@7a158e
portlets.GrailsDispatcherPortlet - Successfully completed request
Четвертая строка в этом фрагменте журнала говорит: Связанный запрос на рендеринг ... , чего я не понимаю, потому что действие в форме в портлете относится к URL-адресу действия. Я бы подумал, что это должен быть запрос на действие.