struts中的接口RequestAware, ModelDriven<?>, Preparable

本文介绍了Struts框架中RequestAware、ModelDriven及Preparable接口的使用方法,包括如何向前端推送数据、装载前台传来的数据及在访问Action前进行预处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值