今天介紹一下如何建立自己得Validator
1. 建立Validator繼承BaseValidator類
我實現得是驗證用戶輸入必須和指定字段一致。
如果想要帶參數得驗證,請添加一個帶String參數得構造方法,并實現setter,getter方法
例如validator驗證調用名為 name,則實現setName,getName方法。
代碼:
package org.appfuse.webapp.tapestry;

import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.TapestryUtils;
import org.apache.tapestry.form.FormComponentContributorContext;
import org.apache.tapestry.form.IFormComponent;
import org.apache.tapestry.form.ValidationMessages;
import org.apache.tapestry.form.validator.BaseValidator;
import org.apache.tapestry.valid.ValidatorException;

public class MyValidater extends BaseValidator {
//用戶得輸入內容
?private String name;

?/**
? * @return the name
? */
?public String getName() {
??return name;
?}

?/**
? * @param name
? *??????????? the name to set
? */
?public void setName(String name) {
??this.name = name;
?}

?public MyValidater() {

?}

?public MyValidater(String string) {
??super(string);
?}

//實現驗證方法
?public void validate(IFormComponent field, ValidationMessages messages,
???Object object) throws ValidatorException {
??String str = object.toString();
??if (!str.equals(name))
???throw new ValidatorException(messages.formatValidationMessage(
?????getMessage(), "invalid-format", new Object[] {
???????field.getDisplayName(), null }));
?}
}

2.ok,修改hivemodule.xml 文件,添加以下代碼

??? <contribution configuration-id="tapestry.form.validator.Validators">
?????? <validator name="name" configurable="true" class="org.appfuse.webapp.tapestry.MyValidater"/>
?? </contribution>


注意:如果你的validator不帶參數,請設置configurable=false
3.? ok,可以在page文件中使用了,

??? <component id="usernameField" type="TextField">
??????? <binding name="value" value="user.username"/>
??????? <binding name="validators" value="validators:required,name=airdream"/>
??????? <binding name="displayName" value="message:user.username"/>
??? </component>

大功告成!輸入內容必須為aridream,否則報錯!