【发布时间】:2015-05-14 09:13:44
【问题描述】:
这是我的jsp代码:
<s:form method="POST" action="foo/bar">
<s:submit value="Update"/>
<s:submit value="Reverse" action="foo/bar/reverse"/>
</s:form>
jsp页面Struts2主题为simple。
这是我的 struts 映射:
<action name="foo/bar"
class="my.package.BarAction">
<result>/foo/bar.jsp</result>
</action>
<action name="foo/bar/reverse"
class="my.package.BarAction"
method="reverse">
<result>/foo/bar.jsp</result>
</action>
所以当我第一次进入页面时,浏览器地址字符串中的url是localhost:myapp/foo/bar.action,当我点击提交按钮时,页面重新加载,url变得相同。但是当我点击“反向”按钮时,页面重新加载,但 url 仍然相同。我认为 url 应该更改为localhost:myapp/foo/bar/reverse.action,因为“反向”按钮映射在该操作上。那么为什么浏览器地址输入中的url不改变呢?并不是说我希望地址字符串中的 url 在按下“反向”时改变,但这似乎是合理的,我很好奇为什么它不会。
Struts 版本是 2.13.5.1
编辑1:
我检查了谷歌开发工具,当我按下“反向”按钮时,请求被发送到“http://localhost/myapp/foo/bar.action”,而不是“http://localhost/myapp/foo/bar/reverse.action”
编辑2:
我尝试删除 foo/bar/reverse 动作的动作映射,现在当我按下“反向”按钮时出现 404 错误,说没有为动作名称 foo/bar/reverse 映射动作。另外查看request发现请求中传递了如下表单数据:action:foo/bar/reverse=Reverse
所以对于客户端来说,struts2 的行为就好像请求被发送到foo/bar.action(这是它实际发送的地方),但后来 struts 执行了不同的操作。
EDIT3:
我将 struts 映射的结果更改为foo/blabla.jsp 以进行foo/bar/reverse 操作,现在按下reverse 按钮后,我得到blabla.jsp 的内容,但浏览器中的url 仍然相同。
我猜,Struts2 似乎就是这样工作的。
【问题讨论】:
-
请显示您的 struts.xml:常量、包等
-
@AndreaLigios 没有常量,包名 = foo,扩展 struts-default
-
这就是 S2 的工作方式。来自
submit的action不会出现在网址栏中。