将页面中的常见字符串值重构为某个EL常量

时间:2011-10-28 11:52:56

标签: jsf jsf-2 el

在JSF组件中,“重构”常见常量的最佳方法是什么,例如<h:graphicImage>标记中的名称/路径到单个本地临时属性?

<ui:composite>

  <h:graphicImage library="mylib" name="/a/b/c/img1.png"/>
  <h:graphicImage library="mylib" name="/a/b/c/img2.png"/>
  <h:graphicImage library="mylib" name="/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>

2 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分:0)

为什么不使用复合组件。然后,当更改时,您无需在整个地方更改img1.png,img2.png,...等。路径可以作为参数提供。