自从我去年开始使用这个webapp以来一直困扰着我(我没有网络开发的经验)我不知道这个应用程序的结构是否错误,或者这只是的方式是
我的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>
问题在于用户看到的网址以及在调试程序(Chrome,IE或Firefox)中列出源文件的网址总是错误的。用户和调试器在登录页面上看到的URL为Welcome
(可以),但在他们登录后,他们会在actLogin.html
页面上看到HomePage
,他们会看到{{ 1 {}在HomePage.html
页面上。 URL始终位于您实际访问的页面后面,因为它使用操作名称。
我的登录JSP 不是是否应将其表单操作命名为LOGIN,因为虽然这是正在执行的操作,但该操作的结果是ViewUsers
?
此应用是否构建怪异并且有更好的方法吗?
答案 0 :(得分:0)
这是由于工作流设计不当造成的。要更正它,您应该阅读PRG pattern。你可以改变
<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中具有相同操作的其他页面,则可以保留它们。