3
我的代码在这里遍历每行的列,并且rendered
属性每次迭代计算一次,过度调用testRule
。如何在JSF中设置变量?
<p:dataTable ...>
<p:column ...>
...
</p:column>
<p:column rendered="#{managedBean.testRule('rules.canDoActions')}">
<!-- Action buttons -->
<h:commandButton ...>
<h:commandButton ...>
</p:column>
</p:dataTable>
为了获得更好的性能,我想知道结果设置成变量,但我不知道如何......这将成为这样的:
<?:??? var="canDoActions" value="#{managedBean.testRule('rules.canDoActions')}">
<p:dataTable ...>
<p:column ...>
...
</p:column>
<p:column rendered="#{canDoActions}">
<!-- Action buttons -->
<h:commandButton ...>
<h:commandButton ...>
</p:column>
</p:dataTable>
另外,我'不允许使用核心标签库,这意味着<c:set ../>
是无可争议的。
在那个范围内,我怎么能设置一个变量?或者,如果不可能,您建议如何解决这个问题?
你为什么不 “允许” 使用JSTL核心标签库? – BalusC 2011-12-20 18:57:01
@BalusC:建筑师决定不使用JSF的JSTL,因为(如果我没有错的话)它运行在其他标签的不同阶段,这里的人们在乱用它,混合东西,出现很多错误和混淆(如果我没有错,JSTL核心不会在ajax调用上重新运行)。 JSTL是为JSP创建的,并且是为其设计的。我知道它可以与JSF一起使用,但是,在这里,架构师决定使用JSTL并不是最佳实践。尽管我们牺牲了JSTL,但我们的问题已经解决了(相信JSTL不是那么必要)。很高兴和你谈谈,@BalusC! – falsarella 2011-12-20 19:21:03
JSTL确实没有必要。但是,当您想要动态构建视图时,它可能会有所帮助。另请参见http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense虽然您的架构师肯定有一个有效的点(它确实经常令启动者感到困惑),但完全限制它有点过分热情。那么''就是你的问题的答案。如果这不是一个选项(或者显示其他问题;例如,它与视图范围的bean不能很好地协作),那么你必须在getter中缓存自己。参见Jigar的答案。 –
BalusC
2011-12-20 19:29:42