JSF(MyFaces)で、JSPを複数のBeanで共有する
<h:inputText id="name" value="#{someBean.name}"/>
みたいに書きます。
普通に使っているぶんには問題ないのですが、例えばひとつの JSP を複数の managed-bean で共有したい場合、このままでは出来ません。
上記でいうところの「someBean」に対応するクラスが、ひとつしか設定できないからです。(Teedaとかですと、htmlの id と bean のプロパティ名が関連付くみたいなので問題ない。きっと。)
そういう場合、TomahawkのaliasBeanを使用するとうまくいきます。
ドキュメントからサンプルソースを抜粋
<t:aliasBean alias="#{holder}" value="#{aliasTest1}" > <f:subview id="simulatedIncludedSubform1"> <h:outputLabel for="name" value="Name:"/> <h:inputText id="name" value="#{holder.name}"/> </f:subview> </t:aliasBean>
aliasBean を使うと、alias で一時変数名を定義して、そこにバインドする bean を外側から変えることができます。
※上記サンプルでは、aliasBean タグの中の holder が参照する managed-bean は、aliasTest1 。
各 managed-bean に対してひとつ JSP を作成して、その JSP から、共有したい JSP を aliasBean タグの中に include するようにすれば、JSPの共有が可能です。
こんな感じ
// JSP 1 で <t:aliasBean alias="#{holder}" value="#{aliasTest1}" > <%@ include file="share.jsp" %> </t:aliasBean> // JSP 2 で <t:aliasBean alias="#{holder}" value="#{aliasTest2}" > <%@ include file="share.jsp" %> </t:aliasBean>
今、JSFを使っている人ってどれくらいいらっしゃるのだろう。。。
※初めてSKKを使って日本語を書いた!