2015-09-17 27 views
0

我有一个使用primefaces和JSF的简单表单。点击保存后,它会显示另一个jsf页面,我有一个primefaces数据表。它应该在数据表中显示新创建的记录,而不是这种情况。为了查看新记录,我必须返回到另一个页面,然后重新打开具有数据表的页面。我可以看到新的纪录。如何解决这个问题,使点击保存我可以看到新的记录?dataTable在保存后不显示新添加的项目

<p:dataTable id="dta" value="#{CarComponent.listCars}" var="current" rows="15" paginator="true" paginatorPosition="bottom"> 
    </dataTable> 


    //method where listCars is populated 
    public String carLists(){ 
     listCars = new arrayList(carDao.findAll()); 
     return "/jsf/listOfcars.xhtml"; 
    } 

    //save method - on clicking save it should display the datatable 

     public String save(Cars car){ 
     carService.save(car); 
     return "/jsf/listOfcars.xhtml"; 
     } 


     public String getlistCars() { 
      return listCars; 
     } 

     public void setlistCars(String listCars) { 
      this.listCars = listCars; 
     } 
+1

你确定你有车加入carList之前/之后保存? – Fritz

+0

请按照最佳实践 - 提供相关库的版本,在这种情况下例如JSF和PrimeFaces。 –

+0

primefaces 5.0和jsf 2.0 – asma

回答

1

我只能猜测,但我假设CarService类是至少ViewScoped甚至SessionScoped?无论如何,正如Fritz在评论中所说的那样,汽车清单显然没有更新,因为视图没有被重新渲染。

您可以做一个重定向与return "/jsf/listOfCars.xhtml?faces-redirect=true"如果bean是@ViewScoped,或者你有新生成的车添加到汽车的名单像

public String saveCar(Car car) { 
    carService.save(car); 
    listCars.add(car); 
    return "/jsf/listOfCars.xhtml"; 
} 
+0

这个bean是:@Scope(“session”) @Component(“CarComponent”) – asma

+0

那么,你试过把新的/保存的汽车添加到bean的支持列表中吗? –

+0

我尝试它,它的工作原理。但这是一个很好的解决方案还是简单的解决方法?性能如何?我找到了另一个解决方法:在listCars的getter方法中,我添加了这一行:listCars = new arrayList(carDao.findAll());并完成这项工作。但是我意识到每次数据表都需要在DB中进行一次不好的性能调用。我对吗? – asma

相关问题