Action 3 ActionForm(未整理)

系统 1515 0

JavaBean的子类 可以自动的对输入进行效验 Struts标签也允许任何javabean来填充某个Html组件

1 ActionForm的创建

1 由于ActionForm本身不能实例化 所以必须是ActionForm的子类

2 必须对每个Html控件定义一个公共的属性

另外 如果想发给Action之前就进行效验 可以实现validate方法 如果想重置数据可以实现reset方法 这两个方法都会在ActionForm填充前被调用

void reset ( ActionMapping mapping, javax.servlet.http.HttpServletRequestrequest)
Reset bean properties to their default state, as needed.
void reset ( ActionMapping mapping, javax.servlet.ServletRequestrequest)
Reset all bean properties to their default state.
ActionErrors validate ( ActionMapping mapping, javax.servlet.http.HttpServletRequestrequest)
Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
ActionErrors validate ( ActionMapping mapping, javax.servlet.ServletRequestrequest)
Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.

例子 Action 1 里的LogonForm.java

public ActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest)
... {

ActionErrorserrors
= new ActionErrors();

if ((username == null ) || (username.length() < 1 ))
errors.add(
" username " ,
new ActionError( " error.username.required " ));

if ((password == null ) || (password.length() < 1 ))
errors.add(
" password " ,
new ActionError( " error.password.required " ));

return errors;

}

那么它在struts-config.xml中的映射就比较简单

< form-beans >
< form-bean name ="logonForm" type ="ergal.LogonForm" />
</ form-beans >

另外还有一个DynaActionForm是ActionForm的子类 它是通过配置文件来定义属性的

< form-bean name ="myForm"
type
="org.apache.struts.action.ActionForm" >
< form-property name ="name"
type
="java.long.string" />

< form-property name ="password
type="
java.long.string" />
</ form-bean >

这样不需要编码来实现JavaBean可以更快更安全

2 ActionForm的主要工作

填充自己的域 数据缓存 数据效验 类型转换和对象传递

填充自己的域

html表单通过web传到服务器时是 文本格式 表单里的元素变成了 名字-数值 对 都是字符串 而不是二进制

html上传文件和附件也都是经过转化成文本数据 然后再转化回去的方法

那么Struts是将输入域转化成javabean的属性 当ActionForm的某个属性和请求中的某个参数名一致时 Struts会自动的将参数值赋给javabean的相应的属性

数据缓存

ActionForm可以充当HTML控件中缺少的缓存区 在传给其他的域之前 ActionForm会保存数据 还可以进行简单的验证

数据效验

前面所讲的validate方法可以简单效验是否符合基本标准 如果不对可以全部返回 让用户修改 也就时效验类型是否符合真正的业务层的需求

类型转换

可以在ActionForm内部进行一些类型转换 但是ActionForm只能使用string和boolean属性的值 所以可以附加一些函数来对数据进行转换

简单的例子

public StringkeyDisplay = null ;
public StringgetKeyDisplay()
... {
return keyDisplay;
}

public IntegergetKey()
... {
return new Integer(getKeyDisplay());
}

然后业务层就可以使用getKey()方法来得到需要的数据类型

ActionForm可以内含其他bean

Struts标签和自动填充机制可以支持用点分隔语法来访问ActionForm中的其他bean

如:

< html:text property ="values.telephoneText"
size
="4"
maxlength
="14" >

可以使用ActionServlet的包装类ActionServletWrapper来进行保护 这个包装类里面的

protected ActionServlet servlet
The servlet instance to which we are attached.

受到保护

3 使用ActionForm

1 实现业务逻辑

如果业务层有接口可用 可以实现这个接口 这样就可以直接传递给业务层

2 当内含bean数据对象时 属性可以用点分隔来引用

3 设置不可改变的数据对象

暂略...

4 设置可改变的数据对象

暂略...

5 使用工厂方法

要在ActionForm中来完成这个转换过程 如果必须创建数据对象 好方法就是工厂方法

例子:

public AgetA()
... {
Abean
= new A( this .getA1(), this .getA2(), this .getA3())
return bean;
}

还可以传递一个存在的数据对象

6 传递一个Map对象

首先将一个属性添加到ActionForm中

private Mapmap = null ;
public void setMap(Mapmap)
... {
this .map = map;
}

public MapgetMap()
... {
return this .map;
}

然后添加一个属性来访问Map

public void setValue(Stringkey,Objectvalue) throws Exception
... {
getMap().put(key,value);
}

public ObjectgetValue(Stringkey) throws Exception
... {
return getMap.get(Key);
}

在Struts标签中可以用下面方法来访问Map的元素

< html:text property ="value(key)" />
< bean:write name ="formbean" property ="value(key)" />

Action 3 ActionForm(未整理)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论