h:commandButton の属性について

ちょっと前にh:commandButtonの使い方について勉強しましたが
今日はその属性について。

action属性

ボタンを押したときのアクションを設定する属性?
documentには

signature must match java.lang.Object action()

って書いてあります。
java.lang.Objectをreturnしてあげる必要があります。だけどactionというメソッド名じゃなくても大丈夫です。
sample1-1.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
 xmlns:h="http://java.sun.com/jsf/html">
<h:head>
 <title>sample1-1</title>
</h:head>
<h:body>
  <h:form>
    <h:message for="input"/>
    <br/>
    <h:inputText id="input" value="#{sampleBean1_1.textBoxValue}" required="true"/>
    <br/>
    <h:commandButton value="button" action="#{sampleBean1_1.sampleAction}"/>
  </h:form>
</h:body>
</html>

sample1-2.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
 xmlns:h="http://java.sun.com/jsf/html">
<h:head>
 <title>sample1-2</title>
</h:head>
<h:body>
  <h:outputText value="#{sampleBean1_1.textBoxValue}"/>
</h:body>
</html>

SampleBean1_1.java

@ManagedBean
public class SampleBean1_1 {
    private String textBoxValue;
    public Object sampleAction(){
        return "sample1-2";
    }
    public String getTextBoxValue() {
        return textBoxValue;
    }
    public void setTextBoxValue(String textBoxValue) {
        this.textBoxValue = textBoxValue;
    }
}

action属性にsampleAction()を呼び出すように設定してあります。
メソッドの処理としてはsample1-2という文字列をreturnしています。
処理としてはボタンを押すとsample1-2.xhtmlが呼び出されて?遷移します。
なのでreturnするのは遷移先のパスを設定します。
ちなみに

<h:commandButton value="button" action="sample1-2"/>

これでもいけます。

actionListener属性

これはButtonを押したときになにかしたいときに設定する?属性。

signature must match void actionListener(javax.faces.event.ActionEvent)

returnはvoidなので何も返しません。メソッド名はactionListenerじゃなくても大丈夫です。
引数がjavax.faces.event.ActionEventじゃないと駄目です。

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
 xmlns:h="http://java.sun.com/jsf/html">
<h:head>
 <title>sample1-1</title>
</h:head>
<h:body>
  <h:form>
    <h:message for="input"/>
    <br/>
    <h:inputText id="input" value="#{sampleBean1_1.textBoxValue}" required="true"/>
    <br/>
    <h:commandButton value="button"
    actionListener="#{sampleBean1_1.sampleActionListener}"/>
  </h:form>
</h:body>
</html>
@ManagedBean
public class SampleBean1_1 {
    private String textBoxValue;
    public void sampleActionListener(ActionEvent e){
        HtmlCommandButton button = (HtmlCommandButton)e.getComponent();
        button.setValue("push");
    }
    public String getTextBoxValue() {
        return textBoxValue;
    }
    public void setTextBoxValue(String textBoxValue) {
        this.textBoxValue = textBoxValue;
    }
}

sampleActionListenerメソッドではActionEventを引数にしています。
ActionEventはEventが発生した情報がわたされる?ので押されたボタンの情報などが
入ってます。
今回は押されたボタンの情報を取得して、ボタンの表示を"push"に変更するようなメソッドです。

action属性とactionListener属性の順番

処理される順番はactionListener属性→action属性の順番です。

immediate属性

booleanで設定します。デフォルトはfalseのようです。
google翻訳にdocumentを翻訳してもらいました。

フラグではなくアプリケーションフェーズを待つことなく、(適用リクエスト値の段階で、されていることを)このコンポーネントは、ユーザーがアクティブになっている場合、通知は興味を持ってリスナーとアクションにすぐに配信されるべきであることを示している。

若干意味が分かりませんが、要はすぐリスナーとアクションが実行されるようです。
なのでh:inputTextに入力チェックなどの設定をしていても、h:commandButtonでimmediate属性をtrueに設定していれば
入力チェックを行わず処理が進んでしまうようです。
いろいろなフェーズがあるようですが
今のところ入力チェックを省きたい時に設定するイメージの属性です。

readonly属性

booleanでデフォルトはfalse。trueにすると

<input type="submit" name="j_idt6:j_idt10" value="button" readonly="readonly" />

押せないようで押せます。

accesskey属性

設定したキーを押すとフォーカスが当たります。ショートカットみたいな感じ。

alt属性

文字列を設定します。

<input type="submit" name="j_idt6:j_idt10" value="button" alt="alt" />

disabled属性

booleanでデフォルトがfalse。trueにすると

<input type="submit" name="j_idt6:j_idt10" value="button" disabled="disabled" />

押せません。

image属性

ボタンに画像を設定します。画像のパスを設定。

type属性

submit、button、resetのいずれかを設定。デフォルトはsubmit。
htmlで設定するのと同じです。

その他属性は・・・

共通的な属性として以前まとめてるのを参照してください。
そこにもないのはわからないです。