【问题标题】:Action name/URL name in debuggers using Struts 2使用 Struts 2 的调试器中的操作名称/URL 名称
【发布时间】:2015-10-07 07:47:54
【问题描述】:

自从我去年开始使用这个 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是否应该将其表单操作命名为 LOGIN,因为虽然这是正在执行的操作,但该操作的结果会转到 HomePage

这个应用的结构是否奇怪?有更好的方法吗?

【问题讨论】:

    标签: jsp configuration struts2 workflow


    【解决方案1】:

    这是由于工作流程设计不当造成的。要更正它,您应该阅读有关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 中使用相同的操作转发到不同的页面,则可以保留它们。

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多