1.使用RequestAware主要是用来向前端推送一些数据
①实现该接口的方法
public void setRequest(Map<String, Object> arg0) {
this.request = arg0;
}
②推送数据:使用request.put(key,data)将数据推送到前端
③在web页面中使用structs的标签来获取数据,示例如下:
<s:iterator value="#request.employees">
<tr>
<td>${id }</td>
<td>${name }</td>
<td>${tel }</td>
</tr>
</s:iterator>
其中"#request.employees"是用来获取第②部放入Map中的数据
2.使用ModelDriven<装载类>
该接口主要用来获取前台传过来的数据,并将其装载到目标装载类的对象中,一般配合structs的form标签使用,方法如下:
①使用structs的form表单提交数据,例如:
<s:form action="emp-save" method="post">
<s:textfield name="name" label="Name"></s:textfield>
<s:textfield name="tel" label="Tel"></s:textfield>
<s:select list="#request.departments"
listKey="id" listValue="Name" name="department.id"
label="Department"></s:select>
<s:submit></s:submit>
</s:form>
②在action中定义一个装载类对象,例如private Employee model=new Employee();
③实现接口方法
public Employee getModel() {
return model;
}
之后系统就会自动帮你实现对bean对象的装载,其内部实现原理是使用java的反射机制,所以装载类对象要为每个成员变量实现setter方法。
3.Preparable接口的使用方法
Preparable顾名思义它的功能就是用于在访问Action的方法之前做些准备工作,其用法如下:
①首先要在structs.xml中配置paramsPrepareParamsStack拦截器栈,配置如下:
<interceptors>
<interceptor-stack name="sshStack">
<interceptor-ref name="paramsPrepareParamsStack">
<!-- 禁用prepare方法,转用prepare*方法 -->
<param name="prepare.alwaysInvokePrepare">false</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 使用新的拦截器栈 -->
<default-interceptor-ref name="sshStack"></default-interceptor-ref>
②为需要做预先处理的action中的接受请求访问的方法,写一个public void prepare*(){ .... }
例如
public String save(){
。。。。
return SUCCESS;
}
public void prepareSave(){
。。。。
}
在调用save前会先调用prepareSave方法