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は呼ばれません。

その他の属性については

以前書いたのを参考にしてください。
タグは違えど使い方は一緒です。