struts2如何获取请求参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2如何获取请求参数相关的知识,希望对你有一定的参考价值。
主要有两种方式:
1. 在action中定义跟表单的name字段同名的field,并生成相应的set方法,这样struts就会自动将参数值设好。
2. 可以在action中获取原生的HttpServletRequest 对象,通过该对象的getParameter(String param) 方法也可以。获取HttpServletRequest的方法是:在action方法(如execute方法)中调用:
HttpServletRequest request = ServletActionContext.getRequest();
即可。
Struts2 -- 获取请求参数
1.直接将action做一个model,就可以得到请求参数.
缺点:需要单独定义javaBean,将action中属性copy到javaBean中。
优点:简单。
这种方式 ,底层是通过反射来实现的。
//获取请求参数 属性驱动 第一种,直接将action做为model public class DemoAction extends ActionSupport { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); // 2.判断用户名与密码是否正确 if ("tom".equals(username) && "123".equals(password)) { request.getSession().setAttribute("username", username); return SUCCESS; } else { request.setAttribute("login.message", "用户名或密码错误"); return "failer"; } } }
2.在action中声明一个model。
2.在action中声明一个model。
private User user;提供get/set方法
在页面上使用ognl来描述
<input type="text" name="user.username">
优点:简单,解决了第一种封装的问题
缺点:在页面上使用了ognl表达式,页面不通用了。
问题:这种方式,数据是怎样封装的?
是通过struts2中的interceptor进行了数据封装.
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
//获取请求参数 属性驱动 第二种,直接在action声明一个model public class DemoAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); // 2.判断用户名与密码是否正确 if ("tom".equals(user.getUsername()) && "123".equals(user.getPassword())) { request.getSession().setAttribute("username", user.getUsername()); return SUCCESS; } else { request.setAttribute("login.message", "用户名或密码错误"); return "failer"; } } }
3.模型驱动
步骤:
1.让action类实现ModelDriven
2.重写getModel方法
3.在action中实现化一个model对象,让getModel方法返回这个对象。
优点:解决了属性驱动存在的问题
缺点:一次只能封装一个model对象.
struts2 有很多围绕模型驱动的特性
* <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性
public class Login1Action extends ActionSupport implements ModelDriven<User>{ private User user = new User(); @Override public User getModel() { return user; } @Override public String execute() throws Exception {
System.out.println(user.getUsername()+" --> "+user.getPassword());
return null; } }
扩展:
1.将数据封装到List集合
页面:
username1:<input type="text" name="users[0].username"><br>
password1:<input type="password" name="users[0].password"><br>
username2:<input type="text" name="users[1].username"><br>
password2:<input type="password" name="users[1].password"><br>
action类:
private List<User> users;
get/set方法
2.将数据封装到Map集合
页面:
username1:<input type="text" name="map[‘aaa‘].username"><br>
password1:<input type="password" name="map[‘aaa‘].password"><br>
username2:<input type="text" name="map[‘bbb‘].username"><br>
password2:<input type="password" name="map[‘bbb‘].password"><br>
action类:
private Map<String, User> map;
提供get/set
以上是关于struts2如何获取请求参数的主要内容,如果未能解决你的问题,请参考以下文章