我正在使用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"/>
后来我发现当我从标签中删除“type”属性时,max length有效。 有谁知道为什么会这样?
答案 0 :(得分:10)
这只是因为HTML5 <input type="number">
element不支持maxlength
属性,因此假设PrimeFaces渲染器不会发出它是合理的。
相反,您应该使用min
和max
属性。从理论上讲,你应该用
<p:inputText type="number" max="999999999" />
然而,这对我不起作用。它没有完全呈现max
(也不是min
)属性。这反过来可能是PrimeFaces组件的疏忽。你最好的选择是report it as an issue to PrimeFaces guys。
同时,你可以通过提供这样的自定义渲染器来解决这个问题,它基本上将min
和max
属性添加到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组件属性,这允许HTML5 data-*
属性自由。
答案 1 :(得分:3)
你需要和#34; maxValue&#34;进行工作:
例如,如果您的最大长度为:8,那么您应该将最大值设置为:99999999这是一个8位数字。
<p:inputNumber value="#{configBean.dependenciaUtils.selected.numTelefonoDependencia}"
required="true"
requiredMessage="Put a value"
maxlength="8"
maxValue="99999999"
thousandSeparator=""
decimalPlaces="0"
/>
答案 2 :(得分:0)
<p:inputNumber maxlength="6"
maxValue="999999"
padControl="false"
thousandSeparator=""></p:inputNumber>
设置maxlength
和MaxValue
来设置Primefaces输入数字的最大长度