2017-04-05 24 views
1

愚かな質問ですが、それは私の状況です。小数が入力されているときに事前定義されたテキストは、 PrimeFaces selectOneMenuで編集可能な入力フィールド

  • を許可
  • に入力された番号の

    • 下限と上限だけ2進数字
    を可能にする:私はinputFieldが制限次たselectOneMenuが編集PrimeFacesを有してい

    10進数の制限を持つ最後のものを除いて、すべてが良好です。つまり、1.111は入力できませんが、入力できるのは1.11です。 selectOneMenuの変更イベントkeyUpは、悲しいことにタグ選択に追加されますが、入力はできません。

    解決方法はありますか?

  • 答えて

    2

    カスタムバリデーターが必要です。あらかじめ定義された値を確認するものを作成します。一致するものが見つからない場合は、数値形式を確認してください。基本的な例:あなたが入力フィールドを見つけ、それにkeypressリスナーをバインドするためにjQueryを使用することができます別の方法として

    <p:selectOneMenu editable="true" ...> 
        ... 
        <f:validator validatorId="myValidator" /> 
    </p:selectOneMenu> 
    

    @FacesValidator("myValidator") 
    public class MyValidator implements Validator 
    { 
    
        private List<String> predefinedValues = Arrays.asList("my", "list"); 
    
        @Override 
        public void validate(FacesContext context, UIComponent component, Object value) 
        throws ValidatorException 
        { 
        String valueStr = (String) value; 
        // Check if value is predefined 
        if (predefinedValues.contains(valueStr)) { 
         return; 
        } 
        // If not predefined, check number format 
        if (! valueStr.matches("^\\d+(\\.\\d\\d?)?$")) { 
         throw new ValidatorException(new FacesMessage("Value is invalid!")); 
        } 
        // Check number limits... 
        } 
    
    } 
    

    バリデータは、あなたのようXHTMLで使用することができます。たとえば、Jquery: filter input on keypressを参照してください。しかし、私はバリデーターをそのまま使用します。たとえば、テキストを貼り付けることができます。

    も参照してください:

    +0

    ありがとうございましたが、その私が望んでいないものを。私は既にバリデーターを持っています。私が達成したいのは、入力することさえできないということです。inputmaskのようなものです。 – Smolda

    +0

    私は答えに代わるものとしてこれを追加しました。 –

    +0

    ああ...それは意味をなさない。 :) – Smolda

    関連する問題