h:selectBooleanCheckboxの使い方

をつかってみる

チェックボックスを使いたいときに使用します。
ON、OFFを切り替えたりするときです。複数チェックするのはまた別にあります。

<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>h:selectBooleanCheckbox</title>
</h:head>
<h:body>
<h:selectBooleanCheckbox value="#{selectBooleanCheckboxBean.selectBooleanCheckbox}"/>
</h:body>
</html>
@ManagedBean
public class SelectBooleanCheckboxBean {
    private Boolean selectBooleanCheckbox;
    public Boolean getSelectBooleanCheckbox() {
        return selectBooleanCheckbox;
    }
    public void setSelectBooleanCheckbox(Boolean selectBooleanCheckbox) {
        this.selectBooleanCheckbox = selectBooleanCheckbox;
    }
}

チェックボックスにチェックを入れるとtrue、入っていないとfalseがjavaに返されます。

属性については

タグの共通的な属性の使い方
タグの共通的な属性の使い方 その2
h:inputTexareaの属性の使い方
ここら辺をみてくれれば良いと思います。

h:outputFormatの使い方

をつかってみる

これは文字を出力したりするタグですが、

これは{0}タグのべんきょうです。

{0}の部分に値を渡して文字列を生成したいときとかに使います。

<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>h:outputFormat</title>
</h:head>
<h:body>
<h:outputFormat value="#{outputFormatBean.outputFormat}">
  <f:param value="h:outputFormat"/>
</h:outputFormat>
</h:body>
</html>
@ManagedBean
public class OutputFormatBean {
    private String outputFormat = "これは{0}タグのべんきょうです。";
    public String getOutputFormat() {
        return outputFormat;
    }
    public void setOutputFormat(String outputFormat) {
        this.outputFormat = outputFormat;
    }
}

これを出力すると

<html xmlns="http://www.w3.org/1999/xhtml"><head> 
 <title>h:outputFormat</title></head><body>これはh:outputFormatタグのべんきょうです。</body> 
</html>

こうなります。
{0}に代入したい値はf:paramタグを使用します。
f:paramタグについては別の機会に勉強します。

その他属性については

特に目新しいものはないようなので
タグの共通的な属性の使い方
タグの共通的な属性の使い方 その2
ここら辺を見てもらえばよいかと思います。

h:inputSecretの使い方

をつかってみる。

htmlで言うと<input type="password">を使いたいときに使用するタグ

<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>h:inputSecret</title>
</h:head>
<h:body>
<h:inputSecret value="#{inputSecretBean.inputSecret}"/>
</h:body>
</html>

これでパスワード入力するときのテキストボックスが表示されます。
↓出力結果

<html xmlns="http://www.w3.org/1999/xhtml"><head> 
 <title>h:inputSecret</title></head><body><input type="password" name="j_idt6" value="" /></body> 
</html>

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

その他の属性については

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

h:inputHiddenの使い方

を使ってみる

inputのtype="hidden"を使いたいときに使用します。

<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>h:inputHidden</title>
</h:head>
<h:body>
<h:inputHidden value="#{inputHiddenBean.inputHidden}"/>
</h:body>
</html>
||<
↓出力結果
>|html|
<html xmlns="http://www.w3.org/1999/xhtml"><head> 
 <title>h:inputHidden</title></head><body><input type="hidden" name="j_idt6" value="inputHidden" /></body> 
</html>
属性については

h:inputSecret同様に
h:inputTexareaの属性の使い方
タグの共通的な属性の使い方
タグの共通的な属性の使い方 その2
ここいら辺を見てみてください。

h:inputTexareaの使い方

input系のタグをとりあえず制覇していこうということで

をつかってみる

文字通りtextareaを使いたいときに使用するタグです。

<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></title>
</h:head>
<h:body>
  <h:inputTextarea value="#{inputTextareaBean.inputTextarea}"/>
</h:body>
</html>
@ManagedBean
public class InputTextareaBean {
    public String inputTextarea;
    public String getInputTextarea() {
        return inputTextarea;
    }
    public void setInputTextarea(String inputTextarea) {
        this.inputTextarea = inputTextarea;
    }
}

cols属性

数字(int)で指定します。columnsなので列数です。

<h:inputTextarea value="#{inputTextareaBean.inputTextarea}" cols="30"/>

↓出力結果

<textarea name="j_idt6:j_idt7" cols="30"></textarea> 

rows属性

数字(int)で指定します。rowsなので行数です。

<h:inputTextarea value="#{inputTextareaBean.inputTextarea}" rows="30"/>

↓出力結果

<textarea name="j_idt6:j_idt7" rows="30"></textarea> 
その他の属性

その他の属性についてはあとでまとめます。

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で設定するのと同じです。

その他属性は・・・

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