1、Struts2的多例
多例的话就可以使用成员变量,创建Service的时候,就可以放成全局。
2、属性驱动
(1) 提供属性的set方法完成封装数据
/**
* Struts2中提供的数据封装的方式一:属性驱动-提供set方法的方式
*
*/
public class User1Action extends ActionSupport{
private String username;
private String password;
private String nickname;
private Integer age;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String execute() throws Exception {
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
System.out.println("昵称:"+nickname);
System.out.println("年龄:"+age);
// 手动封装数据
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setNickname(nickname);
user.setAge(age);
return NONE;
}
}
(2) 在页面中提供表达式的方式完成数据封装
页面:
<h3>属性驱动:页面中提供表达式(OGNL)的方式实现</h3>
<form action="${ pageContext.request.contextPath }/user2Action.action" method="post">
用户名:<input type="text" name="user.username"/><br/>
密码:<input type="password" name="user.password"/><br/>
昵称:<input type="text" name="user.nickname"/><br/>
年龄:<input type="text" name="user.age"/><br/>
<input type="submit"value="提交">
</form>
Action:
/**
* Struts2的数据封装的方式二:页面提供表达式的方式封装
* @author jt
*
*/
public class User2Actionextends ActionSupport{
private User user;
// 需要提供get和set方法:
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}
3、模型驱动
采用模型驱动的方式完成数据封装
页面:
<h3>模型驱动:采用模型驱动的方式实现</h3>
<form action="${ pageContext.request.contextPath }/user3Action.action" method="post">
用户名:<inputtype="text"name="username"/><br/>
密码:<inputtype="password"name="password"/><br/>
昵称:<inputtype="text"name="nickname"/><br/>
年龄:<inputtype="text"name="age"/><br/>
<input type="submit"value="提交">
</form>
Action:
/**
* Struts2的数据封装的方式三:模型驱动的方式封装数据
* @author jt
*
*/
public class User3Action 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);
return NONE;
}
}
***** OGNL表达式的方式和模型驱动都有使用的。
模型驱动通常会使用的方式,有一个缺点,就是只能封装到一个对象中,如果需要封装到多个对象中,就只能使用属性驱动OGNL表达式那种方式。