Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @ViewAccessScope未首次获取所选行_Java_Jsf 2_Cdi_Myfaces - Fatal编程技术网

Java @ViewAccessScope未首次获取所选行

Java @ViewAccessScope未首次获取所选行,java,jsf-2,cdi,myfaces,Java,Jsf 2,Cdi,Myfaces,我使用的是JSF2.0,我有一个数据表,它是使用惰性加载填充的。页面的范围是@viewAccessScope(MyFacesCodi),就像我使用的是CDI/Spring一样 在jsf页面中加载datatable时,当我第一次选择一行(radiobutton)时,我无法获得选中的行,对于后续的选择,我可以在ManagedBean的onRowSelect方法中获得选中的行。如果我使用会话范围,那么当我第一次选择行时,我就能够获得所选行 JSF Code <p:dataTable id="d

我使用的是JSF2.0,我有一个数据表,它是使用惰性加载填充的。页面的范围是
@viewAccessScope
(MyFacesCodi),就像我使用的是CDI/Spring一样

在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" />  

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

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

为了解决这个问题,我创建了一个index.jsp页面并重定向到list.jsf,这样在用户使用单选按钮选择行之前就可以设置cookies


谢谢

这是一个PrimeFaces错误。@DarWhi有什么解决办法吗?我们刚刚创建了自己的组件,因为我们还需要更多的功能,这从来都不是问题。@DarWhi你能详细介绍一下创建自己的组件吗?这只是一组自定义的内部JSF组件。奇怪的是需要它。CODI自动执行初始重定向。将窗口ID添加到URL。但不管怎么说,这都是个大问题。
@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;

   }
public void onRowSelect(SelectEvent event) {
      try {
         setSelectedRequest((Employee) event.getObject());
         System.out.println("row "
               + getSelectedRequest());