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); } }
画面はこんな感じになります。
因みにページ遷移のメソッドにsetRedirect(false)
付けてるんですが、なくても出来ちゃうんですよね。
付けてないと変数の保持できなかったはずなのに。。