2011-12-21 81 views
0

我想知道哪两个代码片断更有效。@Produces在EL表达式中更有效一个吸气器


首先一个

userSearch.xhtml

<rich:dataTable 
    var="user" 
    value="#{userSearchResultList}" 
    rendered="#{not empty userSearchResultList}"> 
... 
</rich:dataTable> 

UserSearchAction.java

@Produces @RequestScoped 
@Named("userSearchResultList") 
public List<User> getResultList() { 
    return resultList; 
} 

第二个

userSearch.xhtml

<rich:dataTable 
    var="user" 
    value="#{userSearchAction.resultList}" 
    rendered="#{not empty userSearchAction.resultList}"> 
... 
</rich:dataTable> 

UserSearchAction.java

public List<User> getResultList() { 
    return resultList; 
} 

在两种方案中,我​​变量由一种方法UserSearchAction.search()填补。

我使用JBoss 7.0.2.Final和RichFaces的4.1.0.Final。

更一般地,我想知道这是否是最好写的生产者,而不是调用JSF文件中的某些类的子属性。

回答

1

这取决于您的生产者如何生产范围。如果它是依赖于范围的(意思是你没有范围,也不在包含的类),它最终会是相同的,可能更少取决于你在这个方法中必须做什么。

在你的榜样应该是更有效,因为生产者方法应该只被调用一次(每个请求)。

+0

是的,这或多或少是我在想什么......但我想知道,如果在JBoss中使用的代码最终使得一个解决方案优于其他...但我认为我会不知道真正的直到我对此进行压力测试...无论如何。 – 2012-01-03 14:41:33

+1

关于被召唤一次的好处! JSF可以多次解析属性,在极端情况下每个请求可以解析数十次。生产者本质上是一种在实例变量中缓存数据的声明性替代方法。使用比请求范围“便宜”的范围可能更有效。我认为不利的一面是可读性。第二种方法更清楚数据来自何处。 – 2012-01-05 18:45:42