Comment définir l'attribut maxlength sur h:inputTextarea
3 réponses
HTML5 + JSF 2.2+
si vous utilisez HTML5 et JSF 2.2+, spécifiez un attribut passthrough.
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
<h:inputTextarea value="#{bean.text}" a:maxlength="2000" />
HTML5 + JSF 2.0 / 2.1
si vous utilisez HTML5, mais pas encore JSF 2.2, utilisez OmniFacesHtml5RenderKit
pour reconnaître de nouveaux attributs HTML5 en JSF 2.0/2.1.
<h:inputTextarea value="#{bean.text}" maxlength="2000" />
HTML4
si vous êtes sur HTML4, alors il n'est déjà pas supporté par HTML lui-même. C'est uniquement pris en charge sur <input>
élément, pas sur <textarea>
élément. C'est aussi la raison pour laquelle il n'y a pas d'attribut de ce genre dans la représentation JSF de cet élément HTML. Vous devez résoudre cette exigence du côté client en utilisant JS et/ou du côté serveur en utilisant JSF. JS vous permet de valider instantanément la longueur et d'ignorer tous les autres caractères. JSF vous permet de le valider pour le cas où le client aurait désactivé ou piraté le code JS. Le mieux serait une combinaison des deux.
en Supposant que vous avez
<h:inputTextarea value="#{bean.text}" styleClass="max">
<f:validateLength maximum="2000" />
</h:inputTextarea>
voici comment vous pouvez faire de jQuery
$('textarea.max').keyup(function() {
var $textarea = $(this);
var max = 2000;
if ($textarea.val().length > max) {
$textarea.val($textarea.val().substr(0, max));
}
});
<h:inputTextarea required="true" cols="50" rows="5" id=”aboutMe” value="#{person.aboutMe}”>
<f:validateLength maximum="400" minimum="20"/>
</h:inputTextarea>
la réponse de BalusC est bonne, mais attention au validateur JSF, invoqué avec f:validateLength maximum="2000" />
, comptera deux fois les nouveaux caractères tandis que $textarea.val().length
comptera seulement une fois. Vous devrez compter deux fois les sauts de ligne dans votre validateur JavaScript si vous voulez que les deux validateurs retournent les mêmes résultats pour les entrées multilignes.
Un exemple de ce problème serait une entrée de "Hello\nWorld"
dans votre zone de texte, où \n est en fait un saut de ligne. Cela compterait 12 caractères par le validateur JSF, mais $textarea.val().length
ne renvoie 11. Cette divergence va évidemment empirer si vous laissez l'utilisateur entrer plusieurs paragraphes.
bien qu'il ne s'agisse pas du même sujet, les premiers paragraphes de l'article a une explication pour le comportement JavaScript. Il y a aussi des commentaires sur cette question précise qui pourraient être utiles.