掌握 JSF 1.2 (Woodstock) 轉換器 與 驗證器:
建立兩個應用:
File → New Project → Web → Web Application,名稱 ValidatorConverter,啟用 Visual Web JSF。
Celsius,Text 0.0,Required true(紅星標示)。Fahrenheit。32.0(水冰點)。minimum = -273.15(絕對零度),maximum = 1000.0。
Double 物件。textField1_processValueChange() 加入:
public void textField1_processValueChange(ValueChangeEvent event) {
double celsius = ((Double) textField1.getText()).doubleValue();
double fahrenheit = 9.0 * celsius / 5.0 + 32.0;
staticText1.setText(new Double(fahrenheit));
}
100 → 正常轉換顯示 212.0。-1000 → 超出範圍驗證失敗。20x → 轉換失敗(非數值)。



Dollar Amount:,Required true。Convert。Converted to Euros:、Date and Time:。Currency,小數位 2,Locale English (US) → 預設貨幣 USD。Currency,Locale German (Germany) → 預設 EUR。
EEE, d MMM yyyy HH:mm:ss zzzz(如 Wed, 14 Jan 2009 15:30:00 CST)。private static final double USD_TO_EUR = 0.74;
public String button1_action() {
Number dollars = (Number) textField1.getValue();
double euros = dollars.doubleValue() * USD_TO_EUR;
staticText1.setText(new Double(euros));
staticText2.setText(new java.util.Date());
return null;
}
$100.00 → 正常轉換顯示歐元與日期。100(缺 $) → 轉換錯誤,上次結果保留。$1,234.56,自動忽略錯誤位置逗號。

需求:輸入必須為三位數字(000-999)。
textField2,Required true,加入訊息組件。Edit Event Handlers → validate。textField2_validate():public void textField2_validate(FacesContext ctx, UIComponent comp, Object value) {
String s = String.valueOf(value);
if (!s.matches("\\d\\d\\d")) {
throw new ValidatorException(new FacesMessage("Not a three-digit number."));
}
}
matches("\\d\\d\\d") 正則表達式限定三位數字。ValidatorException 將錯誤訊息加入 FacesContext,渲染時顯示於訊息組件。
建立資源包 MyResources.properties 覆蓋預設錯誤訊息(全域生效):
New → Other → Properties File,名稱 MyResources,放入 src/java/validatorconverter/。javax.faces.component.UIInput.REQUIRED = Please enter a value and then press Enter.faces-config.xml(XML 模式):<application>
<message-bundle>validatorconverter.MyResources</message-bundle>
</application>
重新執行,空白送出顯示自訂訊息。

| 鍵 | 用途 |
|---|---|
| javax.faces.component.UIInput.CONVERSION | 轉換錯誤 |
| javax.faces.component.UIInput.REQUIRED | 必填欄位 |
| javax.faces.component.UISelectOne.INVALID | 無效單選值 |
| javax.faces.component.UISelectMany.INVALID | 無效多選值 |
| javax.faces.validator.NOT_IN_RANGE | 超出範圍 {0}-{1} |
| javax.faces.validator.DoubleRangeValidator.MAXIMUM | 超過最大值 {0} |
| javax.faces.validator.DoubleRangeValidator.MINIMUM | 低於最小值 {0} |
| javax.faces.validator.DoubleRangeValidator.TYPE | 型別不符 |
| javax.faces.validator.LengthValidator.MAXIMUM | 長度超過最大值 {0} |
| javax.faces.validator.LengthValidator.MINIMUM | 長度低於最小值 {0} |
| javax.faces.validator.LongRangeValidator.MAXIMUM | 超過最大值 {0} |
| javax.faces.validator.LongRangeValidator.MINIMUM | 低於最小值 {0} |
| javax.faces.validator.LongRangeValidator.TYPE | 型別不符 |
validate 事件 + 正則表達式 + ValidatorException。faces-config.xml message-bundle。