页面校验

前台校验:
采用Tapestry提供的核心验证,页面调用的方法:
方法一,采用读取locale配置文件的方式

<input jwcid="userName@TextField" value="ognl:userName" validators="validators:required" displayName="用户名" size="30"/>
方法二,采用自定义的消息的方式:
<input jwcid="userName@TextField" value="ognl:userName" validators="validators:required[[{0}]不能为空!]" displayName="用户名" size="30"/>,其中,{0}取该组件的displayName的直。
方法三,采用自定义验证的方式:
配置:

在应用程序配置文件中配置国际化配置:
<meta key="org.apache.tapestry.accepted-locales" value="en,zh_CN"/>
上面这个配置会首选英文,所以,如果要系统首选中文,那么需要这样配置:
<meta key="org.apache.tapestry.accepted-locales" value="zh_CN"/>,这样 的话所有的客户端校验信息就会是中文的了。
更改默认的校验信息:

如果对默认的校验信息不满意,那么可以更改Tapestry jar包中的org/apache/tapestry/valid/ValidationStrings_zh_CN.properties文件中的内容即可。

后台校验:
tapestry是用Delegator组件进行后台校验的,使用的校验类是org.apache.tapestry.valid.ValidationDelegate类,实现后台校验需要做的就是在.page规范文件中声明一个Delegator组件,然后和ValidationDelegate对象进行绑定,如果发生校验错误,将发生错误的组件,输入的值和错误的信息以及类型存放到ValidationDelegate对象中,然后返回到发生校验错误的页面即可。

.page规范文件:
<page-specification class="com.bjais.Home">
<bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate"/>
<component id="form" type="Form">
<binding name="listener" value="listener:onSubmit"/>
</component>
<component id="weight" type="TextField">
<binding name="value" value="weight"/>
<binding name="translator" value="translator:number,pattern=#.#"/>
</component>
<component id="errors" type="Delegator">
<binding name="delegate" value="beans.delegate.firstError"/>
</component>
</page-specification>

.java文件:
public abstract class Home extends BasePage
{
public abstract int getWeight();
public IPage onSubmit()
{
ValidationDelegate delegate=(ValidationDelegate)getBeans().getBean("delegate");
int weight=getWeight();
if(weight<0)
{
delegate.setFormComponent(getComponent("weight"));
delegate.recordFieldInputValue(Integer.toString(weight));
delegate.record("Weight 必须大于0",ValidationConstraint.TOO_SMALL);
}
if(delegate.getHasError())
{
return null;
}

}
}

.html文件:
<html>
<span jwcid="errors"/>
<form jwcid="form">
<table>
<tr>
<td>Weight:</td>
<td><input type="text" jwcid="weight"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="OK"/></td>
</tr>
</table>
</form>
</html>

但是上面的做法比较繁琐,可以采用validator使验证变的简单些,做法如下:
.page规范文件
<page-specification class="com.bjais.Home">
<bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate"/>
<component id="form" type="Form">
<binding name="listener" value="listener:onSubmit"/>
<binding name="delegate" value="beans.delegate"/>
</component>
<component id="weight" type="TextField">
<binding name="value" value="weight"/>
<binding name="translator" value="translator:number,pattern=#.#"/>

<binding name="validators" value="validators:min=0"/>
<binding name="displayName" value="literal:Weight"/>
</component>
<component id="errors" type="Delegator">
<binding name="delegate" value="beans.delegate.firstError"/>
</component>
</page-specification>

而在.java文件中不用再错数据校验判断了。

在上面的例子中,weight为int,所以需要进行转换,如果用户输入的不是一个数字,那么就会转换失败,这时转换器就会像验证器一样工作,将错误信息记录在验证代理中。

空校验的方法:
<component id="weight" type="TextField">
<binding name="value" value="weight"/>
<binding name="translator" value="translator:number,pattern=#.#"/>

<binding name="validators" value="validators:required,min=0"/>
<binding name="displayName" value="literal:Weight"/>
</component>

也可以加上自定义的校验失败的信息:
<component id="weight" type="TextField">
<binding name="value" value="weight"/>
<binding name="translator" value="translator:number,pattern=#.#"/>

<binding name="validators" value="validators:required[you must enter {0}!],min=0"/>
<binding name="displayName" value="literal:Weight"/>
</component>

还可以和FieldLabel组件一起工作:
<component id="weight" type="TextField">
<binding name="value" value="weight"/>
<binding name="translator" value="translator:number,pattern=#.#"/>

<binding name="validators" value="validators:required[you must enter {0}!],min=0"/>
<binding name="displayName" value="literal:Weight"/>
</component>
<component id="weightLabel" type="FieldLabel">
<binding name="field" value="component:weight"/>
</component>
这样,但验证失败的时候和验证失败的组件关联的fieldLabel也一起发生样式更改,例如颜色变为红色。

validators里面的内容前缀首先是validators:,Validator之间用逗号分隔,每个Validator的格式可以是下面形式

1. name
2. name=value
3. name[message]
4. name[%message-key]
5. name=value[message]
6. name=value[%message-key]
7. $name

其中name为Validator名,如:email, required, max, maxDate, min等等。

value为传入的参数值,如:min=3, max=5等。

message为当该Validator校验失败后显示的Message。

message -key为本地化文件中Message的Key值, 如Tapestry Page Name为Login的话,那么相应的有Login.html,Login.page,Login.properties,Login_zh_CN.properties等,这里面的两个properties文件就是本地化文件。

下面是具体的例子

ValidationExamples.html中

<input type="text" jwcid="minAndMaxWithMessage@TextField"
value="ognl:minAndMaxWithMessage"
translator="translator:number,pattern=#####"
displayName="literal:Min,Max"
validators="validators:min=3[%must-larger-than-3],max=5[Must less than 5]"/></td>

那么在ValidationExamples.properties中为

must-larger-than-3=Field {0} must larger than 3.

需要注意的是,其中的{0}参数会被自动用Field名替换。

$name中的name是对一个bean的引用,该bean可以在Page Specification中定义。

如在ValidationExamples.page中定义为

<bean name="zipValidator" class="org.apache.tapestry.form.validator.Pattern">
<set name="pattern" value="message:zip-code-pattern"/>
<set name="message" value="message:zip-code-message"/>
</bean>

那么在ValidationExamples.html中就可以像下面这样引用。

<input type="text" jwcid="pattern@TextField"
value="ognl:pattern"
displayName="literal:Pattern"
validators="validators:$zipValidator"/>

前台校验的样式

Tapestry4.1使用的是dojo的校验,所以需要加上样式,否则会很难看,需要实现的样式类如下: .alertButton {
width: auto;
border: none;
background-color: #699ED9;
color: #fff;
padding: 0.1em;
border-bottom: 1px solid #5885b6 !important;
border-right: 1px solid #5885b6 !important;
border-top: 1px solid #92b8e2 !important;
border-left: 1px solid #92b8e2 !important;
cursor: hand;
cursor: pointer;
}

.alertDialog {
width: 30em;
border: 2px solid #ff660a;
padding: 1em;
background: #ffffff;
-moz-border-radius: 10px;
}

.alertContent .alertButton {
float: right;
position: relative;
bottom: 1em;
}

.missingList, .invalidList {
padding-bottom: 0.6em;
padding-top: 0.2em;
padding-left: 0.1em;
padding-right: 0.2em;
margin: 0;
}

.missingList {
border-top: 4px solid #bedef4;
}

.invalidList {
border-top: 4px solid #ffaf7e;
}

.missingList li, .invalidList li {
list-style: none;
font-style: italic;
}

.fieldMissing {
background: #bedef4;
}

.fieldInvalid {
background: #ffaf7e;
font-weight: bold;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值