全部博文(2065)
分类: Java
2010-06-14 22:30:35
表单数据校验
时间:
上述的输出说明了Struts 2.0的数据校验工作方式,它需要经过下面几个步骤:
看到这里可能大家会疑问:“这么多地方可以校验表单数据,到底我应该在那里做呢?”有选择是好事,但抉择的过程往往是痛苦的,往往让人不知所措。如果大家参照以下几点建议,相信会比较容易地做出正确的抉择。
相关问题:如何高效地使用反射机制?
使用框架的校验框架
上一节的内容都是关于如何编程实现校验,这部分工作大都是单调的重复。更多情况下,我们使用Struts 2.0的校验框架,通过配置实现一些常见的校验。
个人感觉:这个东西将来会用得比较多的。因为校验是避不可少!在Django里面其实就是一个中间件。
示例:
1、编写Action校验器ValidationAction.java
package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class ValidationAction extends ActionSupport {
private String reqiuredString;
public String getReqiuredString() {
return reqiuredString;
}
public void setReqiuredString(String reqiuredString) {
this.reqiuredString = reqiuredString;
}
@Override
public String execute() {
return SUCCESS;
}
}
其实这个Action没有做什么的。只是简单用来承载客户端传过来的数据而已了。
第二步:定义配置文件
<package name="IOCDemo" extends="struts-default">
<action name="ValidationAction" class="tutorial.ValidationAction">
<result>/Output.jspresult>
<result name="input">/Input.jspresult>
action>
package>
表示:正常就转到Output.jsp页面如果不正常就转到Input.jsp页面。
第三步:定义这两个视图JSP页面
Input.jsp页面
<s:form action="ValidationAction">
<s:textfield name="reqiuredString" label="required
string" >s:textfield>
<s:submit />
s:form>
其中表单名称为 reqiuredString 就是我们的里面的值!Action里面的值了。
Output.jsp页面
Required String :
其中的值是我们所提交的数据值的!
编写:验证器
要注意:一个验证器是与一个Action相匹配的。这里面的Action类名称为ValidationAction
位于哪个包呢?tutorial 。所以我们可以在这个包下面定义我们的验证器了
ValidationAction-validation.xml文件
xml version="1.0" encoding="UTF-8"
?>
DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"
<validators>
<field name="reqiuredString">
<field-validator type="requiredstring">
<message>This string is requiredmessage>
field-validator>
field>
validators>
相当于我们以提交过来的表单值进行一次过滤处理了。
这个功能其实就是相当于我们在servlet层进行一次数据过滤处理。如果为空的话就直接回传数据到客户端。
通过上面的例子,大家可以看到使用该校验框架十分简单方便。不过,上例还有两点不足:
当然,要完善以上不足,对于Struts 2.0来说,只是小菜一碟。
我感觉它的表单框架也是个不错的JS框架!
在上面的例子中,我们通过创建ValidationAction-validation.xml来配置表单校验。Struts 2.0的校验框架自动会读取该文件。
那这么多的配置文件它是如何来查找的呢?现在来看看吧!
假设以下条件成立:
如果Dog要被校验,框架方法会查找下面的配置文件(其中别名是Action在struts.xml中定义的别名):
目前已有的校验器
< validators
>
< validator name ="required"
class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"
/>
< validator name ="requiredstring"
class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"
/>
< validator name ="int"
class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"
/>
< validator name ="double"
class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"
/>
< validator name ="date"
class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"
/>
< validator name ="expression"
class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator"
/>
< validator name ="fieldexpression"
class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"
/>
< validator name ="email" class
="com.opensymphony.xwork2.validator.validators.EmailValidator"
/>
< validator name ="url" class
="com.opensymphony.xwork2.validator.validators.URLValidator"
/>
< validator name ="visitor"
class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"
/>
< validator name ="conversion"
class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"
/>
< validator name ="stringlength"
class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"
/>
< validator name ="regex"
class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"
/>
validators
>
结论:
校验框架与Action进行分离,那样的话我们就不需要把一些验证功能放到Action里面了。而且还可以快速验证表单数据。所以这一招非常好用。记下了。
验证框架是一款非常不错的东西将来在我的项目中要经常多的使用哦!
在使用校验框架时,请不要忘记通过在资源文件加入invalid.fieldvalue.xxx字符串,显示适合的类型转换出错信息;或者使用conversion校验器。