JSF使ui:param结果是静态的



我正在使用模板并传递一些值以在模板中使用它们:

<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

相关内容

  • 没有找到相关文章

最新更新