Grails Liferay portlet not invoking action

Posted by RJ Regenold on Stack Overflow See other posts from Stack Overflow or by RJ Regenold
Published on 2010-02-12T18:23:10Z Indexed on 2010/05/05 13:28 UTC
Read the original article Hit count: 398

Filed under:
|
|
|

I am trying to create a simple portlet for Liferay 5.2.2 using Grails 1.2.1 with the grails-portlets 0.7 and grails-portlets-liferay 0.2 plugins.

I created and deployed a stock portlet (just updated title, description, etc...). It deploys correctly and the view renders correctly. However, when I submit the default form that is in view.gsp it never hits the actionView function.

Here are the relevant code bits:

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>

The tomcat terminal prints In render view whenever I view the portlet, and after I press the submit button. It never prints the In action view statement.

Any ideas?

Update

I turned on logging and this is what I see whenever I click the submit button in the portlet:

[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

The fourth line in that log snippet says Bound render request..., which I don't understand because the action in the form that is in the portlet is to the action url. I would've thought that should be an action request.

© Stack Overflow or respective owner

Related posts about grails

Related posts about liferay