简单的Spring portlet在liferay 6.2的Action映射中不起作用

时间:2013-12-16 08:31:28

标签: spring-mvc portlet liferay-6

一个简单的portlet,它在LifeRay 6.0和Open Portlet Container上正常运行,但是当我部署到Liferay 6.2时,它会在动作映射时中断。我在调试时发现了两个问题。 1)表单数据在操作方法中不可用(未填充) 2)无法使用setRenderParameter

进入带参数的渲染方法

提前感谢任何帮助。

代码示例如下 - 不包括第二个选项(即setRenderParamer)

<portlet:defineObjects/>
<portlet:actionURL var="doFormActionURL">
   <portlet:param name="action" value="doFormAction" />
</portlet:actionURL>



  <form:form name="form" modelAttribute="someObject" method="post"  action="${doFormActionURL}" htmlEscape="false" >
   <table>
  <tr>
    <td><form:input path="id" /></td>
  </tr>
  <tr>
    <td><form:input path="name" /></td>
  </tr>
   </table>
<input type="submit" value="Just do it" />
 </form:form>
控制器中的

@Controller
@RequestMapping("VIEW")
public class ControllerMain
{

@RenderMapping
public String setModelAndView(PortletRequest request, Model model) {

    model.addAttribute("someObject", new SomeObject());
    return "home";
 }

@ActionMapping(params = "action=doFormAction")
public void doFormAction(@ModelAttribute ("someObject") SomeObject someObject, ActionRequest request) {
    String strname = request.getParameter("name");
    System.out.println("someObject : "+someObject.toString());
    System.out.println("name : "+strname);


}

在上下文中

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- property name="cache" value="true" /-->
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="requestContextAttribute"><value>rc</value></property>
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

输出:

someObject:0 空值 空值 name:null

有没有人尝试过liferay 6.2。请分享您的经验

2 个答案:

答案 0 :(得分:3)

但是从Liferay插件的github代码中找到了Sample Spring portlet的liferay-portlet.xml中的一些更改。

尝试以下更改。 在liferay-portlet.xml中设置为false,然后通过部署portlet再次尝试。

<portlet>
    <portlet-name>welcome</portlet-name>
    <requires-namespaced-parameters>false</requires-namespaced-parameters>
</portlet>

来自Liferay github代码的Sample Spring Portlet代码的参考。 LR 6.1 - https://github.com/liferay/liferay-plugins/blob/6.1.x/portlets/sample-spring-portlet/docroot/WEB-INF/liferay-portlet.xml

LR 6.2 - https://github.com/liferay/liferay-plugins/blob/6.2.x/portlets/sample-spring-portlet/docroot/WEB-INF/liferay-portlet.xml

答案 1 :(得分:0)

您应该为您的name值添加名称空间前缀,如下所示:

<input type="text" name="<portlet:namespace />inputTextName" />

或者您可以在requires-namespaced-parameters中将liferay-portlet.xml设置为false。

这是Liferay 6.2以来的变化:https://github.com/liferay/liferay-aui-upgrade-tool/issues/30