Labyrinth of Wisdom

-This is My Archive-


Visualforceでのコンテンツ表示・非表示の切替え

Visualforceで、ある条件の時に表示非表示にする機能、つまりVisualforce内でIf文みたいなものが出来ないか調べたのでメモ。

結論としてはoutputPanelタグのrendered属性を利用すればできました。renderedがtrueなら表示、falseなら非表示になります。(デフォルトはtrue)

RenderTestPage1で「開けゴマ!」と入力したら次のページに文字が出るという簡単なサンプルを作成してみました。

<!-- RenderTestPage1 -->
<apex:page Controller="RenderTestController">
    合言葉は「開けゴマ!」
    <apex:form>
        <apex:inputText value="{!input}"/>
        <apex:commandLink action="{!nextPage}">次のページへ</apex:commandLink>
    </apex:form>
</apex:page>

inputCheckというメソッドを使用してtrue OR falseを取得する場合と、renderedにif文の数式を書いてやればそこで表示判定をすることも可能です。

<!-- RenderTestPage2 -->
<apex:page Controller="RenderTestController">
    <div>
        <apex:outputPanel rendered="{!inputCheck}">
            正解!
        </apex:outputPanel>
    </div>
    <div>
        <apex:outputPanel rendered="{!IF(input='開けゴマ!',true,false)}">
            正解!
        </apex:outputPanel>
    </div>
</apex:page>
public class RenderTestController{

    // RenderTestPage1での入力値
    public String input {get;set;}

    // コンストラクタ
    public RenderTestController(){

    }

    // 合言葉判定メソッド
    public Boolean getInputCheck(){
        if(input.equals('開けゴマ!')){
            return true;
        }else{
            return false;
        }
    }

    // ページ遷移メソッド
    public PageReference nextPage(){
        return Page.RenderTestPage2.setRedirect(false);
    }
}

画面はこんな感じになります。

f:id:Labyrinth_of_Wisdom:20161102113004p:plain

因みにページ遷移のメソッドにsetRedirect(false)付けてるんですが、なくても出来ちゃうんですよね。 付けてないと変数の保持できなかったはずなのに。。