我正在GateIn 3.2.0.FINAL
使用Tomcat 7
(GateIn-3.2.0.Final-tomcat7.zip
)。看起来actionURL
中的参数会被忽略。
我的控制器看起来像这样:
@ActionMapping("search")
public void search(ActionRequest request) {
LOG.info("doing search");
}
@ActionMapping("save")
public void save(ActionRequest request) {
LOG.info("doing save");
}
我的JSP看起来像这样:
<portlet:actionURL var="saveURL">
<portlet:param name="javax.portlet.action" value="save"/>
</portlet:actionURL>
<form:form id="${ns}-save" action="${saveURL}" modelAttribute="createModel">
<!-- omitted some html -->
<input type="submit" value="submit"/>
</form:form>
当我按下提交按钮时,POST应该包含javax.portlet.action=save
,但事实并非如此。不包含名为javax.portlet.action
的参数,并且抛出异常,因为找不到匹配的@ActionMapping
方法。
为HTML中的form
标记生成的网址如下所示:
/portal/classic/home/Permissions?navigationalstate=<gibberish>&portal:componentId=<an UUID>&interactionstate=<gibberish>&portal:type=action&portal:isSecure=false
如果我使用firebug手动编辑网址并向其添加&javax.portlet.action=save
,它就像魅力一样,并在控制器中找到save()
方法。
现在,如果我在war
中部署完全相同的jBoss Portal 2.7.2
,则&javax.portlet.action=save
会包含在网址中。使用GateIn 3.1.0.FINAL
的{{1}}也是如此。
PS
我还尝试过另一个参数键:
Tomcat 6
...和
@ActionMapping({params = "myparam=save"})
public void save(ActionRequest request) {
LOG.info("doing save");
}
......结果相同。作品可在<portlet:actionURL var="saveURL">
<portlet:param name="myparam" value="save"/>
</portlet:actionURL>
和GateIn 3.1
找到,但不能找到jBoss Portal 2.7.2
。
它也不适用于GateIn 3.2
与GateIn 3.2.0.FINAL
。
修改
忘记提及这样做有效,但我不想使用它:
Tomcat 6
答案 0 :(得分:1)
试试这个
ActionMapping({params = "action=save"})
public void save(ActionRequest request) {
LOG.info("doing save");
}
和
<portlet:actionURL var="saveURL" escapeXml="false">
<portlet:param name="action" value="save"/>
</portlet:actionURL>
action是默认的param名称,您必须进行其他更改才能使用自己的名称。
答案 1 :(得分:0)
尝试在actionURL上设置escapeXML="false"
。