2011-06-27 132 views
3

我想驗證輸入爲整數。因此,任何具有小數部分的值都應該過濾。但我不知道如何實現這一點。我已經嘗試了很多東西,但是使用下面的代碼,如果輸入是「61.2」,則該值將轉換爲61,只是截斷小數部分。但我想強制驗證錯誤。我相信我可以做到這一點,而無需自定義驗證器。謝謝驗證JSF中的小數輸入

<p:inputText size="5" value="#{bean.intValue}" converter="#{Integer}"> 
    <f:convertNumber pattern="#0" integerOnly="true" maxFractionDigits="0"/> 
</p:inputText> 

回答

12

這是不可能的,因爲驗證在轉換後運行。您基本上需要將它綁定到String屬性,而不是Integer之一,以驗證未轉換的值。之後您需要在屬性設置器或託管bean操作方法中將其轉換。因此,如果您將其設置爲String媒體資源,則可以使用<f:validateRegex>

<h:inputText value="#{bean.input}" validatorMessage="Please enter digits only"> 
    <f:validateRegex pattern="\d*" /> 
</h:inputText> 

另外,和IMO比手動轉換它在調節器或操作方法更好,你可以帶來它擴展了JSF標準IntegerConverter自定義轉換器和轉換髮生有權利之前驗證模式。

@FacesConverter("digitsOnly") 
public class DigitsOnlyConverter extends IntegerConverter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException { 
     if (!value.matches("\\d*")) { 
      throw new ConverterException(); 
     } 

     return super.getAsObject(context, component, value); 
    } 

} 

<h:inputText value="#{bean.input}" converterMessage="Please enter digits only"> 
    <f:converter converterId="digitsOnly" /> 
<h:inputText> 
0

地方minFractionDigits = 「0」 和圖案= 「###」