我正在使用模板并传递一些值以在模板中使用它们:
<ui:repeat var="entry" value="#{showEntriesBean.entries}" id="repeatId">
<ui:include src="/templates/entryTemplate.xhtml">
<ui:param name="prePath" value="/" />
<ui:param name="allowedToSee" value="#{bean.calcRandom(0, 10)}" />
</ui:include>
<br />
</ui:repeat>
我发现,每次我在entryTemplate.xhtml中使用"allowedToSee"变量时,它都会重新计算它的值。
是否有任何方法以静态方式传递calcRandom的结果?所以它是一次计算(当allowedToSee值被计算),并执行像一个最终的数字?我不希望每次使用#{allowedToSee}时都计算它
如果你想让这个值被保存,你应该把它保存在某个地方。
我会怎么做:
1)创建List<Integer>
属性
2)设置entries
属性值时,调用方法(preRenderEvent
?@PostConstruct?
)在你的列表中引入的项目与entries
中的项目一样多。
3)使用ui:repeat
varStatus
属性查询该列表少一点多一点,比如:
<ui:repeat var="entry" value="#{showEntriesBean.entries}" id="repeatId" varStatus="status">
<ui:include src="/templates/entryTemplate.xhtml">
<ui:param name="prePath" value="/" />
<ui:param name="allowedToSee" value="#{bean.getPrecalculedRandomAt(status.index)}" />
</ui:include>
<br />
</ui:repeat>
关于varStatus
属性的更多信息:http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/ui/repeat.html