如何使用 Struts 2 中的视图?

How to work with view in Struts 2?

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

但是 Struts2 适用于前端控制器模式,而 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>
    

还有其他选择吗?更喜欢哪一个?

在标准的Struts2风格中,一个Actionclass只有一种工作方法,即execute方法。但是,您没有必要必须遵循这一点。您可以在单个操作中定义多个操作 class.

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

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

假设您想通过 POST 到 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 class.

的另一个方法