【问题标题】:Why Struts2 submit tag with action attribute doesn't change page URL为什么带有操作属性的 Struts2 提交标签不会更改页面 URL
【发布时间】: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 不会出现在网址栏中。

标签: jsp struts2


【解决方案1】:

来自Struts2 documentation:

带有斜线的动作名称

如果您的操作名称中有斜杠(例如,

<action name="admin/home" class="tutorial.Admin"/>

) 你需要专门 通过 struts.xml 中的常量允许在动作名称中使用斜杠 通过指定文件

<constant name="struts.enable.SlashesInActionNames" value="true"/>. 

请参阅 JIRA Issue WW-1383 进行讨论,因为有 将此属性设置为 true 的副作用。

【讨论】:

  • 感谢您的详细说明。我实际上已将此属性设置为 true。
  • @dhblah 那你为什么回答“没有常量”? :|
  • 抱歉,我查看的 foo-struts.xml 似乎是由另一个 struts.xml 导入的,该 struts.xml 实际由 struts 使用,并且定义了该常量。我是通过常量名全文搜索找到的。
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2013-10-08
相关资源
最近更新 更多