【发布时间】:2012-09-13 07:22:46
【问题描述】:
我是 struts 和学习它的新手。我的问题是 struts 如何将请求参数与动作实例变量映射。例如,我有一个使用用户名和密码的登录表单。现在它向 LoginAction 发送请求。此操作类如何在用户名实例变量中获取用户名,在密码变量中获取密码。在 servlet 中我们使用request.getParameter() 方法并将值分配给特定的变量。
【问题讨论】:
标签: jakarta-ee struts2
我是 struts 和学习它的新手。我的问题是 struts 如何将请求参数与动作实例变量映射。例如,我有一个使用用户名和密码的登录表单。现在它向 LoginAction 发送请求。此操作类如何在用户名实例变量中获取用户名,在密码变量中获取密码。在 servlet 中我们使用request.getParameter() 方法并将值分配给特定的变量。
【问题讨论】:
标签: jakarta-ee struts2
在struts2中我们使用Interceptor,在这种情况下struts2会为你设置param拦截器的参数,你只需要配置你的拦截器堆栈(或者你只使用默认堆栈)。这里是Interceptor的链接,如果你对struts2很新鲜,就用默认配置感受一下吧。
示例:
<s:form action="my-action">
<s:textfield name="myField"/>
<s:submit/>
</s:form>
和
动作类:
public class MyActionClass extends ActionSupport{
private String myField; // getter and setter
public String execute() throws Exception{
return "success";
}
}
配置:
<package name="default" extends="struts-default">
<action name="my-action" class="MyActionClass">
<result>success.jsp</result>
</action>
</package>
在这种情况下,myField 将由拦截器自动设置。
【讨论】:
Struts 会为您映射参数。这就是为什么使用框架可以节省您的时间和精力的部分原因,因为您不必手动从request 中提取参数。
Struts 通过调用setUsername 自动将请求参数username 映射到您的操作类的username 成员。
另请参阅struts tutorial
【讨论】:
Struts2 使用一组 Interceptors 为您完成繁重的工作,这意味着在您的 Action 方法执行时,您将获得所有需要的数据。
为了将数据从 JSP 传输到动作类 Struts2 使用拦截器名称parameters-interceptor,您只需在动作类中创建与 JSP 字段名称相同的属性,S2 将转换数据并填充适合您的字段。
因此,如果您的 JSP 有两个名称为 userName 和 password 的字段,那么您需要在动作类中使用 getter 和 setter 来定义这些字段
public class MyAction extends ActionSupport{
private String userName;
private String password
//getter ans setter
public String execute() throws Exception{
// do what yoou want
}
}
【讨论】: