2011-10-28 4 views
2

JSFコンポーネントでは、一般的な定数を「リファクタリングする」ための最良の方法は何ですか?単一のローカル、一時的なプロパティへの<h:graphicImage>タグ内の名前/パス?ページ内の一般的な文字列値をあるEL定数にリファクタリングする

<ui:composite> 

    <h:graphicImage library="mylib" name="https://stackoverflow.com/a/b/c/img1.png"/> 
    <h:graphicImage library="mylib" name="https://stackoverflow.com/a/b/c/img2.png"/> 
    <h:graphicImage library="mylib" name="https://stackoverflow.com/a/b/c/img3.png"/> 
    <!-- ... lots of repetitions --> 

</ui:composite> 

は、アプリケーションスコープに

<ui:composite> 

    <-- assign /a/b/c/ to path --> 

    <h:graphicImage library="mylib" name="#{path}img1.png"/> 
    <h:graphicImage library="mylib" name="#{path}img2.png"/> 
    <h:graphicImage library="mylib" name="#{path}img3.png"/> 
    <!-- ... lots of repetitions --> 

</ui:composite> 
+0

より正確には、静的なエンティティを使用すること以外に...計算された「パス」を想像してみてください。 – mtraut

答えて

2

使用<c:set>でなければなりません。これは基本的に変数をapplication mapに格納します。

<c:set var="path" value="a/b/c/" scope="application" /> 
<h:graphicImage library="mylib" name="#{path}img1.png"/> 
<h:graphicImage library="mylib" name="#{path}img2.png"/> 
<h:graphicImage library="mylib" name="#{path}img3.png"/> 

var="path"は、既存の管理対象Bean名または暗黙のEL変数や、と競合しないことを確認してください。必要に応じて、プレフィックスとしてプレフィックスとして_を使用することができます。

<c:set var="_path" value="a/b/c/" scope="application" /> 
<h:graphicImage library="mylib" name="#{_path}img1.png"/> 
<h:graphicImage library="mylib" name="#{_path}img2.png"/> 
<h:graphicImage library="mylib" name="#{_path}img3.png"/> 
+0

これは少し反作用ですが、これは動作します。したがって、ui:paramは評価の結果を要求スコープに書き込むだけですか? – mtraut

+0

なぜこれが最良の選択肢であるか、そしてこれがあらゆる状況下で定数に最適であるかどうかについて、いくつかの言葉が良いでしょう! – Lii

0

なぜ複合コンポーネントを使用しないのですか。その後、変更するときにimg1.png、img2.png、...などの場所を変更する必要はありません。パスはパラメータとして指定できます。

+0

これは自動移行によるものです。元のコードと一致するイディオムの選択肢が限られています。とにかくチップに感謝します。 – mtraut

関連する問題