Page-specification元素的class属性和两个property-specification元素与Pig Latin翻译器应用是相似的。<set-property name="clientScriptingEnabled" expression="true"/>
</bean>
![]()
<property-specification name="username" type="java.lang.String"/>
<property-specification name="password" type="java.lang.String"/>
![]()
<component id="inputUsername" type="ValidField"> ③
<message-binding name="displayName" key="username"/> ④
<binding name="validator" expression="beans.requiredValidator"/> ⑤
<binding name="value" expression="username"/> ⑥
</component>
![]()
<component id="inputPassword" type="ValidField"> ⑦
<message-binding name="displayName" key="password"/>
<binding name="validator" expression="beans.requiredValidator"/>
<binding name="value" expression="password"/>
</component>
![]()
</page-specification>
你会发现第一个新东西-bean元素①,bean元素把一个org.apache.tapestry.valid.ValidationDelegate
的实例指定了名称"delegate"。页面HTML模板里的Form控件把它的参数delegate设定为
ognl:beans.delegate,就是指向了这个org.apache.tapestry.valid.ValidationDelegate实例。
Bean元素②把一个org.apache.tapestry.valid.StringValidator的实例指定了名称"
requiredValidator",以用于验证。这个bean的required属性被设为true表明使用这个bean的域是必须被验证的。这个bean的clientScriptingEnabled属性被设定为ture,表明使用这个bean的域客户端的javascript验证功能是激活的。RequiredValidator bean被用于验证inputUsername和inputPassword的内容。
控件inputUsername③被控件规范声明为ValidField,ValidField是一种用于Tapestry验证子系统的特殊版本的TextField控件。Message-binding元素被用于指定inputUsername控件的displayName参数的值,这个值是用"username"为关键字从login.properties④文件里得到。InputUsername控件的validator参数被设定为requiredValidator bean,这是我们在页面规范里声明过的⑤。控件的value参数跟页面Java类的username属性绑定在一起⑥。控件inputPassword的控件规范跟控件inputUsername几乎相似,除了用于取得displayName的关键字和绑定的页面Java类的属性不同。
通过使用ValidField控件和为表单(form)提供一个ValidationDelegate, 我们激活了Login表单的验证功能。除了服务器端的验证,Tapestry也提供了客户端的验证(利用javascript)。下面就是当用户提交一个表单而没有为UserName域提供值时,一个javascript错误对话框弹出时的屏幕抓图。
