validation - atributos - Cómo establecer el atributo maxlength en h: inputTextarea
atributos textarea html (3)
HTML5 + JSF 2.2+
Si está utilizando HTML5 y JSF 2.2+, especifíquelo como un atributo de paso a través .
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
<h:inputTextarea value="#{bean.text}" a:maxlength="2000" />
HTML5 + JSF 2.0 / 2.1
Si está utilizando HTML5, pero no JSF 2.2 aún, utilice OmniFaces Html5RenderKit
para reconocer los nuevos atributos de HTML5 en JSF 2.0 / 2.1.
<h:inputTextarea value="#{bean.text}" maxlength="2000" />
HTML4
Si usa HTML4, ya no es compatible con HTML. Solo se admite en el elemento <input>
, no en el elemento <textarea>
. Esa es también la razón por la cual no existe ese atributo en la representación JSF de este elemento HTML. Debe resolver este requisito en el lado del cliente usando JS y / o en el lado del servidor usando JSF. JS le permite validar instantáneamente la longitud e ignorar todos los demás caracteres. JSF le permite validarlo también en el caso de que el cliente haya desactivado o pirateado el código JS. Lo mejor sería una combinación de ambos.
Suponiendo que tienes un
<h:inputTextarea value="#{bean.text}" styleClass="max">
<f:validateLength maximum="2000" />
</h:inputTextarea>
así es como podrías hacer el jQuery
$(''textarea.max'').keyup(function() {
var $textarea = $(this);
var max = 2000;
if ($textarea.val().length > max) {
$textarea.val($textarea.val().substr(0, max));
}
});
¿Cómo puedo limitar la duración de <h:inputTextarea>
? Para <h:inputText>
funciona bien con el atributo maxlength
. Sin embargo, este atributo no está disponible en <h:inputTextarea>
.
La respuesta de BalusC es buena, pero tenga en cuenta que el validador JSF, invocado con f:validateLength maximum="2000" />
, contará nuevos caracteres de línea dos veces, mientras que $textarea.val().length
solo los contará una vez. Tendrá que contar dos veces los saltos de línea nueva en su validador de JavaScript si desea que los dos validadores devuelvan los mismos resultados para las entradas de línea múltiple.
Un ejemplo de este problema sería una entrada de "Hello/nWorld"
en su área de texto, donde / n es en realidad un salto de línea. Esto sería contado como 12 caracteres por el validador JSF, pero $textarea.val().length
solo devolvería 11. Esta discrepancia obviamente empeorará si le permite al usuario ingresar múltiples párrafos.
Aunque no se trata del mismo tema, los primeros dos párrafos de this artículo tienen una explicación del comportamiento de JavaScript. También hay algunos comentarios sobre este tema exacto que pueden ser de utilidad.
<h:inputTextarea required="true" cols="50" rows="5" id=”aboutMe” value="#{person.aboutMe}”>
<f:validateLength maximum="400" minimum="20"/>
</h:inputTextarea>