読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

PrimeFacesExtensionsを利用したJSFでのSwitch文

PrimeFaces JSF

JSFで何らかの条件に応じてビュー表示(コンポーネントの表示有無など)を切り替える場合、rendered属性を利用するのが割と素直なのかなと思います。

ただPrimeFacesExtensionsを利用することで、以下のような書き方もできます(^^)

JSFのビュー
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:pe="http://primefaces.org/ui/extensions">
    <h:head>
        <title>Switch Sample</title>
    </h:head>
    <h:body>
        <h:form id="frm">
            <!-- スイッチする条件入力テキストボックス -->
            <p:inputText id="switchInput" value="#{switchBean.switchKey}" />
            
            <!-- ビュー更新ボタン -->
            <p:commandButton id="switchBtn" value="スイッチ" update=":frm:switch" />
            
            <!-- 
                PrimeFacesExtensionsによるスイッチ文 
                  - デフォルトはラベルコンポーネント表示
                  - textと入力されていればテキストコンポーネント表示
                  - buttonと入力されていればボタンコンポーネント表示
            -->
            <pe:switch id="switch" value="#{switchBean.switchKey}">
                
                <pe:defaultCase>
                    <h:outputLabel value="デフォルト" />
                </pe:defaultCase>

                <pe:case value="text">
                    <p:inputText value="テキスト" />
                </pe:case>

                <pe:case value="button">
                    <p:commandButton value="ボタン" />
                </pe:case>
                
            </pe:switch>
        </h:form>
    </h:body>
</html>
Backing Bean
package jp.co.kke.primefacessandbox;

import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named(value = "switchBean")
@RequestScoped
public class SwitchBean implements Serializable{
    
    private String switchKey;

    public String getSwitchKey() {
        return switchKey;
    }

    public void setSwitchKey(String switchKey) {
        this.switchKey = switchKey;
    }

    public SwitchBean() {
    }
}
動作

初期表示。入力文字がないので、Switch文のdefaultに入り、ラベル表示です。
f:id:kikutaro777:20130320224237j:plain

textと入力してボタン押下するとテキスト表示に変わります。
f:id:kikutaro777:20130320224330j:plain

buttonと入力してボタン押下するとボタン表示に変わります。
f:id:kikutaro777:20130320224350j:plain

ビューの中に条件分岐入るのはどうなんでしょ、と思わなくもないですが、項目が多すぎる場合とか、グループで分かれるような場合とか、このように書いたほうがすっきりするケースもなくはないのかな、と思ったり(^^;

自分自身では実際の利用がまだないのですが、PrimeFacesExtensionsを調べていたらこういう書き方ができるものがあると知ったので、簡単な紹介でした。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村