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で設定するのと同じです。
その他属性は・・・
共通的な属性として以前まとめてるのを参照してください。
そこにもないのはわからないです。