InputText PrimeFaces не применяет максимальную длину
Я использую PrimeFaces 3.4 с PrimeFaces Mobile 0.9.3. Я указал maxlength в атрибуте inputText, но он не отображается в HTML. Мой код:
<p:inputText id="price" value="#{bean.price}" styleClass="r-align"
type="number" maxlength="9" validator="priceValidator"/>
Позже я обнаружил, что когда я удаляю атрибут type из тега, работает max length. Кто-нибудь знает, почему это так?
2 ответа
Это просто потому, что maxlength
атрибут не поддерживается в HTML5 <input type="number">
элемент, поэтому разумно предположить, что рендерер PrimeFaces не будет его излучать.
Вместо этого вы должны использовать min
а также max
атрибутов. Теоретически, вы должны быть установлены с
<p:inputText type="number" max="999999999" />
Тем не менее, это не сработало для меня. Это не сделать max
(ни min
) атрибут вообще. Это, в свою очередь, вероятно, упущение в компоненте PrimeFaces. Лучше всего сообщить о проблеме ребятам из PrimeFaces.
В то же время, вы можете обойти это, предоставив пользовательский рендер, как этот, который в основном добавляет min
а также max
атрибуты к списку атрибутов прохождения:
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-*
приписывать свободу.
Смотрите также:
Есть работа, которую вы должны сыграть с maxValue:
Например, если ваша максимальная длина: 8, вы должны указать максимальное значение как: 99999999
<p:inputNumber value="#{configBean.dependenciaUtils.selected.numTelefonoDependencia}"
required="true"
requiredMessage="Put a value"
maxlength="8"
maxValue="99999999"
thousandSeparator=""
decimalPlaces="0"
/>
<p:inputNumber maxlength="6"
maxValue="999999"
padControl="false"
thousandSeparator=""></p:inputNumber>
Установлен maxlength
а также MaxValue
установить максимальную длину для входного номера Primefaces