Подтвердить что ты не робот

Как установить атрибут maxlength на h: inputTextarea

Как ограничить длину <h:inputTextarea>? Для <h:inputText> он отлично работает с атрибутом maxlength. Однако этот атрибут недоступен в <h:inputTextarea>.

4b9b3361

Ответ 1

HTML5 + JSF 2. 2+

Если вы используете HTML5 и JSF 2. 2+, укажите его как сквозной атрибут.

<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">

<h:inputTextarea value="#{bean.text}" a:maxlength="2000" />

HTML5 + JSF 2.0/2.1

Если вы используете HTML5, но еще не JSF 2.2, используйте OmniFaces Html5RenderKit для распознавания новых атрибутов HTML5 в JSF 2.0/2.1.

<h:inputTextarea value="#{bean.text}" maxlength="2000" />

HTML4

Если вы используете HTML4, то он уже не поддерживается самим HTML. Он поддерживается только для элемента <input>, но не для элемента <textarea>. Поэтому также нет такого атрибута в JSF-представлении этого HTML-элемента. Вы должны решить это требование на стороне клиента, используя JS, и/или на стороне сервера, используя JSF. JS позволяет мгновенно проверять длину и игнорировать все остальные символы. JSF позволяет вам также проверить его на случай, если клиент отключил или взломал код JS. Лучше всего было бы сочетание обоих.

Предполагая, что вы

<h:inputTextarea value="#{bean.text}" styleClass="max">
    <f:validateLength maximum="2000" />
</h:inputTextarea>

вот как вы могли бы сделать JQuery

$('textarea.max').keyup(function() {
    var $textarea = $(this);
    var max = 2000;
    if ($textarea.val().length > max) {
        $textarea.val($textarea.val().substr(0, max));
    }
});

Ответ 2

<h:inputTextarea  required="true" cols="50" rows="5" id="aboutMe" value="#{person.aboutMe}">
          <f:validateLength maximum="400" minimum="20"/>
    </h:inputTextarea>

Ответ 3

Ответ на BalusC хорош, но, пожалуйста, будьте осторожны, проверщик JSF, вызванный с помощью f:validateLength maximum="2000" />, будет считать новые строковые символы дважды, тогда как $textarea.val().length будет считать их только один раз. Вам нужно будет удвоить количество разрывов новой строки в вашем валидаторе JavaScript, если вы хотите, чтобы два валидатора возвращали одинаковые результаты для многострочных входов.

Примером этой проблемы будет вход "Hello\nWorld" в вашей текстовой области, где \n - это разрыв строки. Это будет считаться 12 символами с помощью проверки достоверности JSF, но $textarea.val().length будет возвращать только 11. Это несоответствие, очевидно, ухудшится, если вы позволите пользователю ввести несколько абзацев.

Хотя не о том же предмете, в первой параграфах этой статьи есть объяснение поведения JavaScript. Также есть некоторые комментарии к этой точной проблеме, которая может быть полезной.