の長さを制限するにはどうすればよい<h:inputTextarea>
ですか?それは属性<h:inputText>
でうまく機能するからです。maxlength
ただし、この属性はでは使用できません<h:inputTextarea>
。
3 に答える
HTML5 + JSF 2.2+
HTML5およびJSF2.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
を使用してJSF 2.0/2.1の新しいHTML5属性を認識します。
<h:inputTextarea value="#{bean.text}" maxlength="2000" />
HTML4
HTML4を使用している場合は、HTML自体ではすでにサポートされていません。<input>
要素ではサポートされておらず、要素でのみサポートされてい<textarea>
ます。これが、このHTML要素のJSF表現にそのような属性がない理由でもあります。この要件は、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));
}
});
<h:inputTextarea required="true" cols="50" rows="5" id=”aboutMe” value="#{person.aboutMe}”>
<f:validateLength maximum="400" minimum="20"/>
</h:inputTextarea>
BalusCの答えは良いですが、で呼び出されたJSFバリデーターは、f:validateLength maximum="2000" />
改行文字を2回$textarea.val().length
カウントしますが、1回しかカウントしないことに注意してください。2つのバリデーターが複数行の入力に対して同じ結果を返すようにする場合は、JavaScriptバリデーターの改行を二重にカウントする必要があります。
この問題の例は"Hello\nWorld"
、テキスト領域への入力です。\nは実際には改行です。これは、JSFバリデーターによって12文字としてカウントされますが、$textarea.val().length
返されるのは11文字のみです。ユーザーに複数の段落を入力させると、この不一致は明らかに悪化します。
同じテーマではありませんが、この記事の最初の数段落には、JavaScriptの動作についての説明があります。役に立つかもしれないこの正確な問題についてのいくつかのコメントもあります。