gpt4 book ai didi

html - InputText PrimeFaces 未应用最大长度

转载 作者:太空狗 更新时间:2023-10-29 14:44:12 28 4
gpt4 key购买 nike

我将 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"/>

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

最佳答案

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

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

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

但是,这对我不起作用。它没有呈现 max (也不是 min )属性。这反过来可能是 PrimeFaces 组件中的疏忽。你最好的选择是 report it as an issue to PrimeFaces guys .

与此同时,您可以通过提供像这样的自定义渲染器来解决这个问题,它基本上添加了 minmax属性到传递属性列表:

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 中得到原生支持,其中允许 HTML5 data-*属性自由。

另见:

关于html - InputText PrimeFaces 未应用最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14349620/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com