jsf – 我应该如何以及何时从数据库为h:dataTable加载模型
我有一个数据表如下:
<h:dataTable value="#{bean.items}" var="item"> 我想用从服务方法获得的数据库中的集合填充它,以便在初始(GET)请求期间打开页面时立即显示它.我该什么时候打电话给服务方法?为什么? >在加载页面之前调用它.但是怎么样? 解决方法在bean的@PostConstruct方法中执行此操作.@ManagedBean @RequestScoped public class Bean { private List<Item> items; @EJB private ItemService itemService; @PostConstruct public void init() { items = itemService.list(); } public List<Item> getItems() { return items; } } 让值引用属性(不是方法!). <h:dataTable value="#{bean.items}" var="item"> 在@PostConstruct中,您的优势在于它在构造和依赖注入之后执行.因此,如果您正在使用EJB来执行数据库交互任务,那么@PostConstruct肯定是正确的位置,因为注入的依赖项在普通构造函数中不可用.此外,当使用使用代理的bean管理框架(例如CDI @Named)时,构造函数可能会或可能不会按您期望的方式调用.在检查类,生成代理和/或创建代理期间,可以多次调用它. 至少不要在getter中执行数据库交互作业,除非它是延迟加载而你真的不能做任何其他事情.即,它将在每轮迭代期间调用.在每轮迭代期间调用服务方法效率很低,并且在演示和回发期间可能会出现“怪异”的副作用,例如来自DB的旧值似乎仍然在模型中而不是新提交的值中. 如果依赖GET请求参数,则使用< f:viewParam>和< f:viewAction>代替.如果要在同一视图上的回发中保留模型(items属性)(例如CRUD表/对话框),则将bean设为@ViewScoped. 也可以看看: > Why JSF calls getters multiple times (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |