我有一个包含复选框的数据表,我希望当用户选择一个或多个项目时...他的选择列表将显示在另一个页面中jsf
我有一个selectOneMenu,允许用户选择一个类别(数据表中填充了此类别的产品)..用户可以从此表中选择一个或多个产品。选项列表显示在另一个jsf页面中.. 我希望用户可以从类别1中选择项目,并从另一个类别(2或3 ...)添加到此列表文章。我的问题是,一旦用户切换到另一个类别(在selectOneMenu中),选择列表没有记录,如果它进入确认页面..选择列表只包含最后选择的项目。有人可以告诉我如何保存chackbox选项,即使用户选择另一个类别?
代码在我之前的问题中可见:checkbox in datatble using primefaces5
这是我在jsf中所做的改变..但是我的问题仍然存在..你可以帮助我找到我的代码中的错误(因为即使@BalusC已经慷慨地向我提供了上述解决方案,这看起来很合乎逻辑我不知道我的错误在哪里)任何指导都将不胜感激。谢谢你提前:)
<p:selectOneMenu id="category" value="#{catBean.category}" valueChangeListener="#{catBean.changeCategory}" var="line" style="width:150px">
<p:ajax listener="#{catBean.onCategoryChange}" update="product" />
<p:ajax process="product" listener="#{catBean.updateProducts}" update="product" />
<f:selectItem itemLabel="Select Category" itemValue="" noSelectionOption="true" />
<f:selectItems value="#{catBean.myItems}" />
</p:selectOneMenu>
<p:outputLabel for="product" value="" />
<p:dataTable id="product" var="line" value="#{catBean.myProducts}" selection="#{catBean.selectedItems}" style="margin-bottom:0" rowKey="#{line.cdProduct}">
答案 0 :(得分:1)
在更改下拉列表时,也要处理数据表,通过valueChangeListener
记住以前的选择,将当前选择复制到Map
并从ajax监听器中恢复新选择方法:
<p:selectOneMenu value="#{bean.category}" valueChangeListener="#{bean.changeCategory}">
...
<p:ajax process="@this products" listener="#{bean.updateProducts}" update="products" />
</p:selectOneMenu>
<p:dataTable id="products" value="#{bean.products}" selection="#{bean.selection}" ...>
...
</p:dataTable>
使用
private String category;
private String previousCategory;
private List<Product> products;
private List<Product> selection;
private Map<String, List<Product>> selections = new HashMap<>();
public void changeCategory(ValueChangeEvent event) {
previousCategory = (String) event.getOldValue();
}
public void updateProducts() {
selections.put(previousCategory, selection);
products = productService.find(category);
selection = selections.get(category);
}