【发布时间】:2012-05-23 04:10:17
【问题描述】:
我正在使用 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 标签生成的 URL 如下所示:
/portal/classic/home/Permissions?navigationalstate=<gibberish>&portal:componentId=<an UUID>&interactionstate=<gibberish>&portal:type=action&portal:isSecure=false
如果我使用 firebug 手动编辑 URL 并将&javax.portlet.action=save 添加到其中,它就像一个魅力,它会在控制器中找到save() 方法。
现在,如果我在jBoss Portal 2.7.2 中部署完全相同的war,则&javax.portlet.action=save 将包含在URL 中。 GateIn 3.1.0.FINAL 和 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。
编辑
忘了说这样做是可行的,但我不想使用它:
<form:form id="${ns}-save" action="${saveURL}&javax.portlet.action=save" modelAttribute="createModel">
<!-- omitted -->
</form:form>
【问题讨论】:
标签: spring jsp spring-mvc tomcat7 gatein