我正在使用 JSF 2.0,并且我有一个使用延迟加载填充的数据表。@ViewAccessScoped
当我使用 CDI/Spring 时,页面的范围是(MyFaces CODI)。
当在 jsf 页面中加载数据表并且第一次选择一行时(单选按钮),我无法获得选定的行,对于后续选择,我能够在 ManagedBean 的 onRowSelect 方法中获得选定的行。如果我使用会话范围,那么当我第一次选择行时,我能够获得选定的行。
JSF Code
<p:dataTable id="dataTable" var="req" lazy="true" value="#{emp.lazyModel}"
rowKey="#{req.empNo}"
paginator="true" rows="10"
selection="#{emp.selectedRequest}">
<p:ajax event="rowSelectRadio" listener="#{emp.onRowSelect}" />
<p:column selectionMode="single" style="width:18px" />
托管豆
@Named("emp")
@ViewAccessScoped
public class EmployeeManagedBean implements Serializable {
private Employee selectedRequest = new Employee();
@PostConstruct
public void init() {
initTable();
}
private void initTable() {
lazyModel = new LazyEmployeeDataModel(requestList, requestService);
}
public LazyDataModel<Employee> getLazyModel() {
return lazyModel;
}
和onRowSelect方法
public void onRowSelect(SelectEvent event) {
try {
setSelectedRequest((Employee) event.getObject());
System.out.println("row "
+ getSelectedRequest());