您的位置:首页 > 编程语言 > Java开发

Struts 原理(二) --- 3.3 简化Struts开发

2009-01-30 17:46 225 查看
3.3 简化Struts开发

3 .3 . 1 使用动态FormBean简化开发

1 . 配置动态Form

其实就是不需要什么ActionForm了 ,首先在struts-config.xml中进行配置 , 例如下面 :

<form-bean name="houseInfoDynaForm"

type="org.apache.struts.action.DynaActionForm">

<form-property name="title" type="java.lang.String"></form-property>

<form-property name="cityId" type="java.lang.Integer"></form-property>

<form-property name="streetId" type="java.lang.Integer"></form-property>

<form-property name="rent" type="java.lang.Double"></form-property>

<form-property name="room" type="java.lang.Integer"></form-property>

<form-property name="hall" type="java.lang.Integer"></form-property>

<form-property name="houseType" type="java.lang.Integer"></form-property>

<form-property name="houseInfo" type="java.lang.String"></form-property>

<form-property name="telephone" type="java.lang.String"></form-property>

<form-property name="contactName" type="java.lang.String"></form-property>

</form-bean>

在struts-config.xml中写这些足够了 , 如果需要修改ActionForm的参数也是只需要在这里修改的 ,

当然 对应的<action> 还需要修改其中的属性 name = "value" value 是 houseInfoDynaForm

2 . 取得动态Form中的值

从动态Form中取值的方式与普通的FormBean getter方法取值不同 , 所以对应Action 代码也不同 ,

所以对应的Action代码也不同 .

DynaActionForm houseInfoDynaForm = (DynaActionForm)form ;

HouseInfo houseInfo = new HouseInfo();

houseInfo.setContactName(houseInfoDynaForm.getString("title"));

houseInfo.setHall((Integer)houseInfoDynaForm.get("hall"));

houseInfo.setHouseInfo(houseInfoDynaForm.getString("houseInfo"));

houseInfo.setHouseType((Integer)houseInfoDynaForm.get("houseType"));

houseInfo.setRent((Double)houseInfoDynaForm.get("rent"));

houseInfo.setRoom((Integer)houseInfoDynaForm.get("room"));

houseInfo.setStreetId((Integer)houseInfoDynaForm.get("streetId"));

houseInfo.setTelephone(houseInfoDynaForm.getString("telephone"));

houseInfo.setTitle(houseInfoDynaForm.getString("title"));

可以使用get方法从动态Form中取值 , 这一般是针对非String类型的 ,比如 int 或者 double 类型的 , 而String类型的就只使用getString() 了 ,

那么 象 houseInfoDynaForm.getString("title") 中的 title 是一个key 值 , 它是对应struts-config.xml中 FormBean中的 name 属性的 .

但是还有注意 , get方法取到的值为Object类型 , 需要我们使用 ((Integer)houseInfoDynaForm.get("houseType")) 或者

((Double)houseInfoDynaForm.get("rent")) 来 转换成实际的类型 . 也可以通过getString()来直接获取String类型的值 .

至此 , 我们已经完成了修改的工作 .

使用动态FormBean可以不必创建对应FormBean类, 减少了编码工作, 也方便修改 .

3.3.2 使用实体对象作为FormBean属性简化开发

问题:

使用动态Form虽然省去了FormBean的编码工作 , 但ActionBean中的代码并没有因此变得简单 ; 而且业务逻辑的变化 , 数据库增减字段时 ,

需要修改的地方也包括实体类 , FormBean定义 和 ActionBean 中相应代码 , 很容易漏掉某处而引入错误 .

分析 :

我们知道EL表达式可以通过${HouseInfoForm.title} 的方式显示数据 , 假如HouseInfo中有一个类型为HouseInfo 类型的 属性 ,

如 下面示例所示 :

public class HouseInfoForm extends ActionForm{

private HouseInfo item = new HouseInfo();

//下面就要生成get 和set 方法了

}

我们可以通过${HouseInfoForm.item.title} 来显示了 .

总结到此, 我们使用FormBean 的主要目的是让表单提交的数据自动提交到FormBean中 , 如果 ActionForm 如上面的例子那样定义 ,

那么对应的表单域中那么属性要这样写呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: