这是我的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
,当我点击提交按钮,页面重新加载时,网址变为相同。但是,当我点击“反向”按钮,页面重新加载,但网址仍然相同。我认为网址应该更改为localhost:myapp/foo/bar/reverse.action
,因为“反向”按钮会映射到该操作上。那么为什么浏览器地址输入中的url不会改变?并不是说我希望地址字符串中的url在“反向”按下时改变,但它似乎是合理的发生,我很好奇为什么它没有。
Struts版本是2.13.5.1
EDIT1:
我检查了谷歌开发工具,当我按“反向”按钮时,请求被发送到“http://localhost/myapp/foo/bar.action”,而不是“http://localhost/myapp/foo/bar/reverse.action”
EDIT2:
我尝试删除foo/bar/reverse
操作的操作映射,现在当我按下“反向”按钮时出现404错误,表示没有为操作名称foo / bar / reverse映射的操作。同时查看请求,我发现请求中传递了以下表单数据:action:foo/bar/reverse=Reverse
因此,对于客户端来说,struts2的行为就像请求被发送到foo/bar.action
(实际发送它的地方),但后来struts执行不同的操作。
EDIT3:
我将struts映射的结果更改为foo/blabla.jsp
foo/bar/reverse
操作,现在按reverse
按钮后,我得到blabla.jsp
的内容,但浏览器中的url仍然是相同。
我想,似乎Struts2的工作原理。
答案 0 :(得分:1)
操作名称以斜杠
如果你的动作名称中有斜杠(例如,
<action name="admin/home" class="tutorial.Admin"/>
)你需要具体 通过struts.xml中的常量允许动作名称中的斜杠 文件通过指定
<constant name="struts.enable.SlashesInActionNames" value="true"/>.
请参阅JIRA Issue WW-1383进行讨论 将此属性设置为true的副作用。