一、实现与Servlet API的交互
Struts2中提供了Map类型的request、session、与applicatoin,可以从ActoinContext对象中获得。ActionContext对象位于
com.opensymphony.xwork2包中,它是Action执行的上下文,其中常用API方法如下:
**实例化ActionContext
ActionContext的构造方法需要传递一个Map类的上下文对象,应用这个构造方法创建ActionContext对象非常不方便,所以通常
情况下都使用ActionContext对象提供的getContext()方法进行创建。其方法声明如下:
public static ActoinContext getContext()
**获取Map类型的request
获取Struts2封装的Map类型的request,使用ActionContext对象提供的get()方法进行获取
public Object get(Object key)
Map request = ActionContext.getContext.get("request");
ActionContext对象提供的get()方法,不仅可以获取Map类型的request,还可以获取session、local等对象。
**获取Map类型的session
public Map getSession()
**获取Map类型的application
public Map getApplication()
二、域模型(DomainModel)
将一些信息封装到一个实体对象,
public class UserAction extends ActionSupport{
private User user;
@Override
public String execute() throws Exception{
return SUCCESS;
}
public User getUser(){
return user;
}
public void setUser(User user){
this.user = user;
}
}
<body>
<h2>用户注册</h2>
<s:form action="userAction" method="post">
<s:textfield name="user.name" label="用户名"></s:textfield>
<s:password name="user.password" label="密码"></s:password >
<s:radio name="user.sex" list="#{1:'男',0:'女'}" label="性别"></s:radio >
<s:submit value="注册"></s:submit >
<s:form>
</body>
三、驱动模型ModleDriven
在Struts2 API中,提供了一名为ModleDriven的接口。Action对象可以通过实现此接口,获取指定的实体对象,
获取指定实体对象,获取的方式是实现ModelDriven接口提供的getModel()方法进行获取。
如果Action对象实现了ModelDriven接口,当表单被提交到Action对象后,其处理流程:
(1)Struts2实例化Action实现ModelDriven
(2)创建User对象
(3)是否实现ModleDriven
(4)getModel()
(5)返回User
(6)对属性赋值
Struts2首先会实例化Action对象,然后判断此Action对象是否是ModleDriven对象,如果此Action对象实现了ModelDriven接口,则会调用
getModel()方法来获取实体对象模型,在获取到实体对象之后,将其返。
<body>
<h2>用户注册</h2>
<s:form action="userAction" method="post">
<s:textfield name="name" label="用户名"></s:textfield>
<s:password name="password" label="密码"></s:password >
<s:radio name="sex" list="#{1:'男',0:'女'}" label="性别"></s:radio >
<s:submit value="注册"></s:submit >
<s:form>
</body>
public clas UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
@Override
public String execute() throws Exception{
return SUCCESS;
}
@Override
public User getModel(){
return this.user;
}
}
注意:由于UserAction类中的user属性需要进行初始化操作,否则,在getModel()方法获取实体对象时候,将出空指针异常