自从去年我开始使用这个web应用程序(我没有开发web应用的经验)以来,这一直困扰着我,我不知道这个应用程序的结构是否不正确,或者它是否就是这样的。
我的welcome
页面实际上是一个登录页面,在我的应用程序中的用户登录到一个主页之后,他们就有了一个菜单,可以转到其他各种功能。
我是struts.xml
**:**
<action name="Welcome">
<interceptor-ref name="newStack" />
<result name="success">Login.jsp</result>
</action>
<action name="actLogin" class="actionLogin">
<interceptor-ref name="newStack" />
<result name="success">HomePage.jsp</result>
<result name="error">Login.jsp</result>
</action>
<action name="actHomePage" class="actionHomePage">
<interceptor-ref name="newStack" />
<result name="viewUsers"> ViewUsers.jsp</result>
<result name="addUser"> AddUser.jsp</result>
<result name="viewWidgets">ViewWidgets.jsp</result>
<result name="addWidget"> AddWidget.jsp</result>
</action>
JSP文件如下所示:Login.jsp
**:**:
<s:form action="actLogin" name="formLogin" method="post">
<s:textfield name="userId" id="txtUserId"/>
<s:password name="password" id="txtPassword"/>
.. login submit button ...
</s:form>
HomePage.jsp
**:**
<s:form action="actHomePage" name="formHomePage" method="post">
. . . menu items that set values for action to pick up to route to the correct page
</s:form>
ViewUsers.jsp
**:**
<s:form action="actViewUsers" name="formViewUsers" method="post">
<h2>User List</h2>
. . .
</s:form>
问题在于用户看到的URL和在调试器(Chrome、IE或Firefox)中列出源文件的URL总是错误的。用户和调试器看到的URL是登录页面上的Welcome
(这是可以的),但是在登录之后,他们在HomePage
页面上看到了actLogin.html
,在ViewUsers
页面上看到了HomePage.html
。URL总是位于您实际所在的页面后面,因为它使用操作名称。
如果我的登录JSP没有它的表单操作被命名为登录,因为这是正在执行的操作,该操作的结果将转到HomePage
。
这个应用程序结构奇怪吗?有更好的方法吗?
发布于 2015-07-17 19:39:20
这是由于糟糕的工作流设计造成的。要更正它,您应该阅读有关PRG模式的文章。你可以改变
<action name="actLogin" class="actionLogin">
<interceptor-ref name="newStack" />
<result name="success" type="redirectAction">actHomePage</result>
<result name="error">Login.jsp</result>
</action>
<action name="actHomePage" class="actionHomePage">
<interceptor-ref name="newStack" />
<result name="success">HomePage.jsp</result>
</action>
不需要其他结果,但如果需要转发到URL中具有相同操作的不同页面,则可以保留这些结果。
https://stackoverflow.com/questions/31478366
复制相似问题