Evg*_*rov 13 datatable getter jsf loading
我有一个数据表如下:
<h:dataTable value="#{bean.items}" var="item">
Run Code Online (Sandbox Code Playgroud)
我想用从服务方法获得的数据库中的集合填充它,以便在初始(GET)请求期间打开页面时立即显示它.我什么时候应该打电话给服务方法?为什么?
Bal*_*usC 18
用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;
}
}
Run Code Online (Sandbox Code Playgroud)
并让value引用属性(不是方法!).
<h:dataTable value="#{bean.items}" var="item">
Run Code Online (Sandbox Code Playgroud)
在@PostConstruct你的优势是它在构造和依赖注入之后执行.因此,如果您正在使用EJB来执行数据库交互任务,@PostConstruct那么肯定是正确的位置,因为注入的依赖项在普通构造函数中不可用.此外,当使用使用代理(例如CDI)的bean管理框架时@Named,构造函数可能会或可能不会以您期望的方式调用.在检查类,生成代理和/或创建代理期间可以多次调用它.
至少要做到不中,吸气执行DB交互工作,除非它是延迟加载,你真的不能做任何事情.即,它将在每轮迭代期间被调用.在每轮迭代期间调用服务方法效率很低,并且在演示和回发期间可能会出现"怪异"的副作用,例如来自DB的旧值似乎仍然在模型中而不是新提交的值中.
如果您依赖GET请求参数,则使用<f:viewParam>而<f:viewAction>不是.如果要items在同一视图上的回发中保留模型(属性)(例如CRUD表/对话框),则创建bean @ViewScoped.
| 归档时间: |
|
| 查看次数: |
8062 次 |
| 最近记录: |