到目前为止,我所读到的所有内容都让我相信,没有一种干净的方法可以做到这一点。假设我们有一个我们希望在页面中可重用的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对此有一些意见。