如何在Struts 2中使用视图?

时间:2015-03-02 08:21:15

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

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

但Struts2适用于Front Controller模式,而doGet/doPost只有execute方法。那么我如何才能正确地为用户提供一些页面,那么他可以看到它,输入数据,提交和应用程序作为结果在execute进行处理?

据我所知,我有两个选择(例如注册表格):

  1. 将网页映射到另一个网址:     

    <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>
    
  3. 还有其他选择吗?哪一个更喜欢?

1 个答案:

答案 0 :(得分:1)

在标准Struts2样式中,Action类只有一个工作方法,这是execute方法。但是,您没有必要遵循此。您可以在单个Action类中定义多个操作。

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

@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类的另一个方法。