h:inputTexareaの属性の使い方
h:h:inputTextareaの使い方の続きです。
converter属性
valueに設定されている値をconvertする設定をします。
<h:inputTextarea converter="toUpperCase" id="textarea" value="#{inputTextareaBean.inputTextarea}"/>
toUpperCaseというidで登録しているconverterを設定しています。
converterクラスについてはタグの共通的な属性の使い方に軽く実装例があります。
converterクラスを作る方法でなければ
<h:inputTextarea converter="#{inputTextareaBean.toLowerCase}" id="textarea" value="#{inputTextareaBean.inputTextarea}"/>
private Converter toLowerCase = new Converter() { @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { return value != null ? value.toLowerCase() : null; } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { return value != null ? value.toString().toLowerCase() : null; } };
BeanのなかにConverterのフィールドをつくってセットして上がれば使えます。
ソースがごちゃごちゃしそうですが・・・
converterMessage属性
converterを呼び出した後にメッセージを表示したいときに表示するメッセージを表示する属性。
設定する値としてはStringなので
<h:inputTextarea converter="toUpperCase" converterMessage="大文字にしました。" id="textarea" value="#{inputTextareaBean.inputTextarea}"/>
とすればよいはず。ですが表示されませんでした。
documentをgoogle翻訳してもらうと
ValueExpressionは、コンバータから来るすべてのメッセージを交換する、存在する場合、コンバータのメッセージのテキストとして使用される属性を有効に
とあったのでconverterクラスでメッセージを設定したらメッセージが置き変わって表示されるかと
思ったのですが、converterで設定したメッセージが表示されました。バグ?
validator属性
入力チェックを設定する属性です。
signature must match void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Objectの3つを引数にする
メソッドを作って設定してあげればよいということです。メソッド名はなんでもよいです。
<h:inputTextarea validator="#{inputTextareaBean.validate}" id="textarea" value="#{inputTextareaBean.inputTextarea}"/>
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { Pattern pt = Pattern.compile("[0-9]+"); if(!pt.matcher(value.toString()).matches()){ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "数字を入力してください","入力されているのは数字ではありません")); } }
数字以外が入力されていればエラーになるvalidatorです(適当につくってあるので)。
validatorクラスを作って設定することもできます。
validatorMessage属性
入力チェックのときのエラーメッセージなどを設定する属性です。
これを設定しておくとvalidatorのメッセージと置き換わって表示されます。
<h:inputTextarea validator="#{inputTextareaBean.validate}" validatorMessage="入力チェックエラーです。" id="textarea" value="#{inputTextareaBean.inputTextarea}"/>
required属性
入力必須かを設定する属性です。
booleanでデフォルトはfalseです。trueにすると入力必須になります。
<h:inputTextarea required="true" id="textarea" value="#{inputTextareaBean.inputTextarea}"/>
requiredMessage属性
必須チェックのエラーメッセージを設定します。
required属性がtrueってのが条件です。
<h:inputTextarea required="true" requiredMessage="必須です。" id="textarea" value="#{inputTextareaBean.inputTextarea}"/>
valueChangeListener属性
入力されていた値が変更されたときに実行するメソッドを設定する属性。
signature must match void valueChange(javax.faces.event.ValueChangeEvent)
メソッド名はなんでもOKです。
<h:inputTextarea valueChangeListener="#{inputTextareaBean.valueChangeListener}" id="textarea" value="#{inputTextareaBean.inputTextarea}"/>
public void valueChangeListener(ValueChangeEvent e){ HtmlInputTextarea inputTextarea = (HtmlInputTextarea)e.getComponent(); inputTextarea.setDisabled(true); }
入力されていた値を変更してボタンなんかを押すとdisabledになるメソッドをつくってみました。
実行される順番は・・・
converter、validator、valueChangeListenerの実行される順番は
converter→validator→valueChangeListenerのようです
converterが呼ばれた後にvalidatorが呼ばれますが、validatorで入力チェックエラーとかになった場合
convertの結果は無視されるみたいです。そしてvalueChangeListenerは呼ばれません。
その他の属性については
以前書いたのを参考にしてください。
タグは違えど使い方は一緒です。