在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>
答案 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,...等。路径可以作为参数提供。