2011-06-27 10 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

変換後に検証が実行されるため、これはできません。変換されていない値を検証するには、Integerの代わりにStringプロパティにバインドする必要があります。後でプロパティセッターまたはマネージドBeanアクションメソッドで変換する必要があります。したがって、Stringプロパティにする場合は<f:validateRegex>を使用できます。

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

、および手動セッターやアクションメソッドでそれを変換するよりもIMOよりよい、あなたはJSF標準IntegerConverterを拡張するカスタムコンバータに持参し、変換が行われる前にそこに右にパターンを検証することができます。

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

場所minFractionDigits = "0" とパターンと

@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); 
    } 

} 

= "###"