Jsf 其他地方的nswers/blogs/tutorials/articles.@Tiny:也许这个答案有助于理解DAO模式背后的原意:@BalusC为什么会话范围太广?通过使用视图范围,每次用户加载页面时都必须生成列表,对吗?这不是“坏”吗?或者我们只是更喜欢

Jsf 其他地方的nswers/blogs/tutorials/articles.@Tiny:也许这个答案有助于理解DAO模式背后的原意:@BalusC为什么会话范围太广?通过使用视图范围,每次用户加载页面时都必须生成列表,对吗?这不是“坏”吗?或者我们只是更喜欢,jsf,jakarta-ee,jpa,ejb,dao,Jsf,Jakarta Ee,Jpa,Ejb,Dao,其他地方的nswers/blogs/tutorials/articles.@Tiny:也许这个答案有助于理解DAO模式背后的原意:@BalusC为什么会话范围太广?通过使用视图范围,每次用户加载页面时都必须生成列表,对吗?这不是“坏”吗?或者我们只是更喜欢这样,而不是让bean在整个会话中保持活动状态并消耗内存?@LyK:单击“如何选择正确的bean作用域?”进行解释。@LyK:您不应该在前端的所有会话中缓存DB结果。您应该将它们缓存在后端的单个位置。JPA提供二级缓存的可能性。另外一个优点是,


其他地方的nswers/blogs/tutorials/articles.@Tiny:也许这个答案有助于理解DAO模式背后的原意:@BalusC为什么会话范围太广?通过使用视图范围,每次用户加载页面时都必须生成列表,对吗?这不是“坏”吗?或者我们只是更喜欢这样,而不是让bean在整个会话中保持活动状态并消耗内存?@LyK:单击“如何选择正确的bean作用域?”进行解释。@LyK:您不应该在前端的所有会话中缓存DB结果。您应该将它们缓存在后端的单个位置。JPA提供二级缓存的可能性。另外一个优点是,它精确地知道何时使缓存的实体无效。
<h:dataTable value="#{userListController.userList}" var="u">
    <h:column>#{u.userId}</h:column>
    <h:column>#{u.userName}</h:column>
</h:dataTable>
@Named(value = "userListController")
@SessionScoped
public class UserListController {
    @EJB
    private UserListService userListService;

    private List<User> userList;

    public List<User> getUserList() {
        userList = userListService.getUsers();
        return userList;
    }
}
public class UserListService {

    @PersistenceContext
    private EntityManager em;

    public List<User> getUsers() {
        Query query = em.createQuery("SELECT u from User as u");
        return query.getResultList();
    }
}