Struts ActionForm

来源:互联网 发布:淘宝优惠券样式 编辑:程序博客网 时间:2024/04/30 01:43

 动态ActionForm的编写:
动态ActionForm是为了避免过多的ActionForm类而设计的,使用动态ActionForm
可以获得静态AcitonForm的所有好处;

1、在Struts-config.xml定义动态AcitonForm
如:
  <form-bean name="dynaUserActionForm" type="org.apache.struts.action.DynaActionForm">
   <form-property name="name" type="java.lang.String"/>
   <form-property name="age" type="java.lang.Integer"/>
  </form-bean>
2、在Action中使用的时候,需要强制转换为DynaActionForm类型,同时使用get方法来获取
如:
     DynaActionForm dynaform = (DynaActionForm)form;
     String name = (String)dynaform.get("name");
     Integer age = (Integer)dynaform.get("age");
     
参考:DynaActionFormTestAction类
----------------------------------------------------------------

上传文件:
1、页面的action需要配置:enctype="multipart/form-data",如:
    <form action="upload.do" method="post" enctype="multipart/form-data">
     标题:<input type="text" name="title"><br>
     文件名:<input type="file" name="myfile"><br>
     <input type="submit" value="上传"><br>
    </form>
注意:method必须设置为post
2、ActionForm中使用FormFile来接收文件
3、在Action中调用FormFile即可取得上传文件的相关数据,完成上传
参见:UploadAction类

空字段的问题:
如果页面没有写<input>,用jsp脚本在后台接收到的字符串为null,及空对象,如果用EL表达式,则为空串“”
如果页面中有<input>,没有输入值,后台接收到的为空串“”

----------------------------------------------------------------
Struts对ActionForm类型的自动转换:
boolean: yes,y,1,true,on这些都可以转换为true类型,而且是忽略大小写的;其它情况会转换为false类型
Date类型的转换:
* 如果定义Date为: java.sql.Date类型,页面传递到后台的相应属性不能为空字符串,而且其格式
  必须是yyyy-MM-dd。
* 如果定义Date为:java.util.Date类型,默认情况下,struts无法转换此类型,我们需要定义
  自己的Converter来进行转换
----------------------------------------------------------------
Struts对ActionForm类型的自动转换过程:
1、搜索request中的parameter
2、把request中所有的参数名称和值(字符串类型)放到map中(key为参数名称,value为值)
3、调用BeanUtils.setProperty方法,将map中的值逐个设置到ActionForm的数性上;
   *对于ActionForm中的每一个属性,根据属性的类型,调用相应的Converter
   *调用Converter的convert方法,将相应的字符串转换成ActionForm中指定的类型
  
Converter的convert方法如下:  
public Object convert(Class type, Object value) {}

如果我们要转换为java.util.Date类型(即从一个字符串转换为java.util.Date类型),步骤如下:
1、实现一个Converter
2、将converter进行注册(通常用servlet注册,注意servlet标签中的<load-on-startup>标签的值必须大于等于0,web server在启动的
   时候才会调用servlet的init方法 )
----------------------------------------------------------------
我们可以通过BeanUtils.copyProperties(目标对象,源对象) 方法,在ActionForm对象和实体对象之间复制,避免过多的调用get/set方法 

 

 


 

原创粉丝点击