创建托管bean组件的多个实例

时间:2014-06-10 13:39:41

标签: jsf jsf-2 managed-bean multiple-instances icefaces-3

到目前为止,我所读到的所有内容都让我相信,没有一种干净的方法可以做到这一点。假设我们有一个我们希望在页面中可重用的ace列表组件。我们有以下内容(我知道您不能为managedBean提供带注释的多个名称,但这只是为了显示我想要做的事情。)

@ManagedBean(name="carListBean, truckListBean, suvListBean")
@CustomScoped(value="#{window}")
public class TestListBean {

    private List<Vehicle> dragFromList;
    private List<Vehicle> dragDestList;

    public TestListBean() {

    }

    public List<Vehicle> getDragFromList() {
        return dragFromList;
    }

    public List<Vehicle> getDragDestList() {
        return dragDestList;
    }

    public void setDragFromList(List<Vehicle> dragFromList) {
        this.dragFromList = dragFromList;
    }

    public void setDragDestList(List<Vehicle> dragDestList) {
        this.dragDestList = dragDestList;
    }

}

@ManagedBean(name="testSearchBean")
@RequestScoped
public class TestSearchBean {

   private VehicleService vehicleService;

   @ManagedProperty("#{carListBean}")
   TestListBean carListBean;

   @ManagedProperty("#{truckListBean}")
   TestListBean truckListBean;

   @ManagedProperty("#{suvListBean}")
   TestListBean suvListBean;

   private String year;
   private String color;

   public TestSearchBean() {
       vehicleService = new VehicleService();
   }

   @PostConstruct
   public void init() {
       carListBean.setDragDestList(new ArrayList<Vehicle>());
       carListBean.setDragFromList(vehicleService.getVehicleList("car"));
       truckListBean.setDragDestList(new ArrayList<Vehicle>());
       truckListBean.setDragFromList(vehicleService.getVehicleList("truck"));
       suvListBean.setDragDestList(new ArrayList<Vehicle>());
       suvListBean.setDragFromList(vehicleService.getVehicleList("suv"));
   }

   // all getters and setters here...

然后我将拥有searchScreen.xhtml,它将拥有3个ace:list组件,显示卡车,汽车和suv列表。

这可能以某种方式做到吗?还有,这个糟糕的设计吗?我认为重用托管ListBean会更加清晰,而不是在3个不同的类中具有几乎相同的代码(唯一的区别是服务调用参数)。对此的任何想法都会很棒。谢谢!我希望BalasC对此有一些意见。

0 个答案:

没有答案