7

我正在使用 PrimeFaces 3.4 和 PrimeFaces Mobile 0.9.3。我在 inputText 属性中指定了 maxlength,但它没有在 HTML 中呈现。我的代码:

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

后来我发现当我从标签中删除“类型”属性时,最大长度有效。有谁知道为什么会这样?

4

3 回答 3

11

这仅仅是因为HTML5元素maxlength不支持属性,因此可以合理地假设 PrimeFaces 渲染器不会发出它。<input type="number">

相反,您应该使用minmax属性。从理论上讲,您应该设置为

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

但是,这对我不起作用。它没有完全呈现max(也没有min)属性。这又可能是 PrimeFaces 组件中的疏忽。您最好的办法是将其作为问题报告给 PrimeFaces 人员

同时,您可以通过提供这样的自定义渲染器来解决此问题,该渲染器基本上将minandmax属性添加到 pass thru 属性列表中:

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 2.2 中将原生支持通过自定义 JSF 组件属性,其中允许 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>

设置maxlengthMaxValue设置 Primefaces inputnumber 的最大长度

于 2019-06-18T05:52:21.383 回答