使用Struts 2

时间:2015-07-17 14:37:21

标签: jsp configuration struts2 workflow

自从我去年开始使用这个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

此应用是否构建怪异并且有更好的方法吗?

1 个答案:

答案 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中具有相同操作的其他页面,则可以保留它们。