JSF(MyFaces)で、JSPを複数のBeanで共有する

JSFは、JSPの中に

<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を使って日本語を書いた!