在简单的servlets
中,我可以使用doGet
和doPost
方法。在doGet
我将用户转发到某个页面并在doPost
我处理从我提供的页面输入的数据的位置。这一切都发生在一个servlet中。
但Struts2适用于Front Controller模式,而doGet/doPost
只有execute
方法。那么我如何才能正确地为用户提供一些页面,那么他可以看到它,输入数据,提交和应用程序作为结果在execute
进行处理?
据我所知,我有两个选择(例如注册表格):
将网页映射到另一个网址:
<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>
创建名为display
的整个包,并将所有可以执行POST的视图放在那里:
<package name="display" namespace="/display" extends="struts-default">
<action name="register">
<result name="success" type="dispatcher">register.jsp</result>
</action>
...
</package>
还有其他选择吗?哪一个更喜欢?
答案 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类的另一个方法。