7

PrimeFaces3.4とPrimeFacesMobile0.9.3を使用しています。inputText属性でmaxlengthを指定しましたが、HTMLでレンダリングされていません。私のコード:

<p:inputText id="price" value="#{bean.price}" styleClass="r-align" 
type="number" maxlength="9" validator="priceValidator"/>

後で、タグから「type」属性を削除すると、最大長が機能することがわかりました。なぜこれが当てはまるのか誰かが知っていますか?

4

3 に答える 3

11

これは、属性がHTML5要素maxlengthでサポートされていないためです。したがって、PrimeFacesレンダラーは属性を発行しないと想定するのが妥当です。<input type="number">

代わりに、属性を使用する必要がminありmaxます。理論的には、次のように設定する必要があります

<p:inputText type="number" max="999999999" />

しかし、これは私にはうまくいきませんでした。max(またはmin)属性を完全にレンダリングしませんでした。これは、PrimeFacesコンポーネントの見落としである可能性があります。あなたの最善の策は、それを問題としてPrimeFacesの人に報告することです

それまでの間、パススルー属性のリストに基本的にminと属性を追加する次のようなカスタムレンダラーを提供することで、これを回避できます。max

package com.example;

import java.io.IOException;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.primefaces.component.inputtext.InputTextRenderer;

public class MyInputTextRenderer extends InputTextRenderer {

    @Override
    protected void renderPassThruAttributes(FacesContext facesContext, UIComponent component, String[] attrs) throws IOException {
        String[] newAttrs = new String[attrs.length + 2];
        System.arraycopy(attrs, 0, newAttrs, 0, attrs.length);
        newAttrs[newAttrs.length - 2] = "min";
        newAttrs[newAttrs.length - 1] = "max";
        super.renderPassThruAttributes(facesContext, component, newAttrs);
    }

}

次のように登録することで実行できます。

<render-kit>
    <renderer>
        <component-family>org.primefaces.component</component-family>
        <renderer-type>org.primefaces.component.InputTextRenderer</renderer-type>
        <renderer-class>com.example.MyInputTextRenderer</renderer-class>
    </renderer>
</render-kit>

カスタムJSFコンポーネント属性のパススルーは、今後のJSF 2.2でネイティブにサポートされることに注意してください。これにより、特にHTML5data-*属性の自由が可能になります。

参照:

于 2013-01-16T02:51:25.327 に答える
3

「maxValue」で遊ぶ必要がある回避策があります。

たとえば、最大長が8の場合、最大値を99999999と入力する必要があります。これは、8桁の数値です。

<p:inputNumber value="#{configBean.dependenciaUtils.selected.numTelefonoDependencia}"
                                       required="true"
                                       requiredMessage="Must put a value"
                                       maxlength="8"    
                                       maxValue="99999999"
                                       thousandSeparator=""
                                       decimalPlaces="0"
                                       />
于 2016-10-26T16:09:25.270 に答える
1
<p:inputNumber maxlength="6" 
               maxValue="999999" 
               padControl="false" 
               thousandSeparator=""></p:inputNumber>

Primefaces入力番号の最​​大長を設定maxlengthおよび設定しますMaxValue

于 2019-06-18T05:52:21.383 に答える