JSF2.0とJSTLの連携
今回はJSF2.0とJSTLとの連携です。
余談ですが、今回からJDKとGlassfishを
最新版にしてみました。
【概要】
今回はJSTLのうち
JSTLで変数を参照する際、
変数を参照する時には「$」を使用していました。
JSF2.0と連携する場合、JSF2.0の「#」を使った書き方で使用できます。
サンプルは選んだリンクによって、
ヘッダ・コンテンツ・フッタの表示/非表示を制御するプログラムです。
【サンプルコード】
ManagedBean
まずはManagedBeanからです。
@ManagedBean(name = "jstlSample") @RequestScoped public class JstlSample { private boolean viewHeader = false; private boolean viewContent = false; private boolean viewFooter = false; public String init(final boolean viewHeader, final boolean viewContent, final boolean viewFooter) { this.viewHeader = viewHeader; this.viewContent = viewContent; this.viewFooter = viewFooter; return "jstlSample.xhtml"; } // アクセサメソッドは省略 }
initメソッドでヘッダ・コンテンツ・フッタの表示フラグを受け取ります。
ページ
続いてページ側です。
ページはリンクを表示するページと
リンクによって遷移するページを作ります。
まずはリンクを表示するページです。
<?xml version="1.0" encoding="Windows-31J" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <f:view> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J" /> <title>JSTL</title> </h:head> <h:body> <h:form id="sampleForm"> <div> <h:commandLink value="全部あり" action="#{jstlSample.init(true, true, true)}" /> </div> <div> <h:commandLink value="ヘッダのみ" action="#{jstlSample.init(true, false, false)}" /> </div> <div> <h:commandLink value="コンテンツのみ" action="#{jstlSample.init(false, true, false)}" /> </div> <div> <h:commandLink value="フッタのみ" action="#{jstlSample.init(false, false, true)}" /> </div> </h:form> </h:body> </f:view> </html>
リンクによって渡すパラメータの値が変わっています。
つづいて遷移先のページです。
<?xml version="1.0" encoding="Windows-31J" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:h="http://java.sun.com/jsf/html"> <f:view> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J" /> <title>JSTL</title> </h:head> <h:body> <c:if test="#{jstlSample.viewHeader}"> <div> ヘッダ </div> </c:if> <c:if test="#{jstlSample.viewContent}"> <div> コンテンツ </div> </c:if> <c:if test="#{jstlSample.viewFooter}"> <div> フッター </div> </c:if> </h:body> </f:view> </html>