这仅仅是因为HTML5元素maxlength
不支持属性,因此可以合理地假设 PrimeFaces 渲染器不会发出它。<input type="number">
相反,您应该使用min
和max
属性。从理论上讲,您应该设置为
<p:inputText type="number" max="999999999" />
但是,这对我不起作用。它没有完全呈现max
(也没有min
)属性。这又可能是 PrimeFaces 组件中的疏忽。您最好的办法是将其作为问题报告给 PrimeFaces 人员。
同时,您可以通过提供这样的自定义渲染器来解决此问题,该渲染器基本上将min
andmax
属性添加到 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-*
属性自由。
也可以看看: