【问题标题】:How to work with view in Struts 2?如何在 Struts 2 中使用视图?
【发布时间】:2015-03-02 08:21:14
【问题描述】:

在普通的 servlets 中,我可以使用 doGetdoPost 方法。在doGet 中,我将用户转发到某个页面,而在doPost 中,我正在处理从我提供的页面输入的数据。这一切都发生在一个 servlet 中。

但是 Struts2 在 Front Controller 模式下工作,而 doGet/doPost 我只有 execute 方法。那么我怎样才能正确地给用户一些页面,以便他可以看到它,输入数据,提交和申请作为结果在execute 中处理它?

据我所知,我有两个选择(注册表上的示例):

  1. 将页面映射到另一个 url:

    <action name="register_display">
        <result name="success" type="dispatcher">register.jsp</result>
    </action>
    
    <action name="register"
        class="magazine.action.client.RegisterClientAction"
        method="execute">
        <result name="success" type="redirectAction">/index</result>
        <result name="error" type="redirectAction">register_display
        </result>
    </action>
    
  2. 创建一个名为 display 的整个包,并在其中放置可以执行 POST 的所有视图:

    <package name="display" namespace="/display" extends="struts-default">
      <action name="register">
         <result name="success" type="dispatcher">register.jsp</result>
      </action>
    ...
    </package>
    

还有其他选择吗?哪个更受欢迎?

【问题讨论】:

  • 向我们展示 Struts.xml 文件中的相应操作。
  • 创建方法,不要显式使用execute方法,创建2个动作(一个无方法,另一个使用自定义方法)。
  • 您应该使用不同的动作名称,除非您使用 Struts 动作的 REST 样式映射。
  • @VinothKrishnan 我编辑了我的帖子
  • @RomanC 我实际上并不熟悉这种映射。但关键是我应该在我的操作中提供两种方法,并将一种用于将用户转发到某个页面,另一种用于提交它?

标签: java jsp model-view-controller struts2 front-controller


【解决方案1】:

在标准的 Struts2 风格中,Action 类只有一个工作方法,即execute 方法。但是,您不必遵循这一点。您可以在单个 Action 类中定义多个操作。

例如,您向users 发出GET 请求,该请求在UsersAction 的默认execute 方法中处理。

@Override
public String execute() {
    // fetch the list of users
    return SUCCESS;
}

假设您想在同一操作中添加一个新用户,方法是向user_add 发送帖子。所以你定义了一个add 方法:

public String add() {
    // add the user
    return SUCCESS;
}

struts.xml 看起来类似于:

<package name="users" extends="defaultPackage">
    <action name="users" class="com.example.UsersAction">
        <result>users.jsp</result>
    </action>

    <action name="user_add" class="com.example.UsersAction" method="add">
        <result type="redirect">users</result>
    </action>
</package>

在您的场景中,您将呈现您的页面,用户应该在运行(可能是空的)execute 方法后看到该页面。然后,您将发出 post 请求,该请求将映射到 Action 类的另一个方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 2011-03-22
    • 2014-02-16
    • 1970-01-01
    • 2013-03-17
    • 2014-11-23
    • 2013-07-15
    相关资源
    最近更新 更多