Liferay Portlet - 带有命名空间的表单名称,getParameterMap缺少参数

时间:2014-01-22 06:10:37

标签: forms liferay portlet liferay-6

我正在使用Liferay 6.2,我在jsp中有一个如下表单

<form name="<portlet:namespace/>"
    action="<portlet:actionURL windowState='normal'>
               <portlet:param name='action' value='processAction'/>
            </portlet:actionURL>"
    method="post">
    Value: <input type="text" name="prpValue" />
    <input type="submit" name="submit" value="Submit" />
</form>

在我使用的相应processAction方法中

actionRequest.getParameterMap();没有prpValue参数?

这里缺少什么?

注意:我不能将actionRequest.getParameter()与namesapce一起使用,因为我的通用逻辑是这样的,我需要获取所有参数。

2 个答案:

答案 0 :(得分:4)

尝试

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

这正确地命名参数,它将被定向到您的portlet。实际参数可以读作

actionRequest.getParameter("prpValue");

所以PortalRequest参数处理已经删除了命名空间


编辑:正如你所说它不适合你,这对我有用:具有这些实现的普通portlet:

@ProcessAction(name="go")
public void go(
        ActionRequest request, ActionResponse response)
    throws IOException, PortletException {

    StringBuilder result = new StringBuilder();

    Map<String, String[]> pm = request.getParameterMap();
    for(String key:pm.keySet()) {
        result.append(key).append(": [ ");
        String[] value = pm.get(key);
        if(value != null) {
            for(String val:value) {
                result.append(val).append(" ");
            }
        }
        result.append("]<br/>");

    }

    response.setRenderParameter("PM", result.toString());
}

和view.jsp一样:

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
Testportlet 

<form action="<portlet:actionURL name='go'/>" method="post">
    <input name="<portlet:namespace/>test" type="text" value="testing"/><br/>
    <input type="submit"/><br/>
</form>

<hr/>
<%=renderRequest.getParameter("PM") %>

答案 1 :(得分:0)

我也被困在这上面了。解决方案很简单。 添加<requires-namespaced-parameters>false</requires-namespaced-parameters> 到你的liferay-portlet.xml - &gt; portlet条目。 这是版本6.2的更改。 There is official detailed explanation