Ответ 1
Это просто потому, что атрибут maxlength
не поддерживается в элементе HTML5 <input type="number">
, поэтому разумно предположить, что рендеринг PrimeFaces выиграл 't испускать его.
Вместо этого вы должны использовать атрибуты min
и max
. Теоретически, вы должны быть установлены с помощью
<p:inputText type="number" max="999999999" />
Однако это не сработало для меня. Он не отобразил атрибут max
(или min
). Это, в свою очередь, вероятно, является надзором в компоненте PrimeFaces. Лучше всего сообщить об этом как о проблеме для парней PrimeFaces.
В то же время вы можете это сделать, предоставив собственный визуализатор, подобный этому, который в основном добавляет атрибуты min
и max
в список атрибутов pass throughru:
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-*
.