@ViewAccessScoped第一次没有选中行

时间:2012-12-27 08:25:06

标签: java jsf-2 cdi myfaces

我正在使用JSF 2.0,并且我有一个数据表,使用延迟load来填充。当我使用CDI / Spring时,该页面的页面是@ViewAccessScoped(MyFaces CODI)。

当在jsf页面中加载datatable时,当我第一次选择一行(radiobutton)时,我无法获得选定的行,对于后续选择,我可以在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" />  

ManagedBean

@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()); 

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,问题是cookies。

第一次加载list.jsf时,未设置cookie。因此,当用户选择行时,cookie被设置,因此对于后续选择,用户可以获得选定的行值。

要解决此问题,我创建了一个index.jsp页面并重定向到list.jsf,因此在用户使用单选按钮选择行之前会设置cookie。

由于

相关问题