仅在模型中更新p:dataList的最后一个pe:fluidGrid迭代中的值

时间:2015-06-11 07:12:48

标签: jsf-2 primefaces jsf-2.2 primefaces-extensions

在我的bean中,我有一个,我在HashMap<PDIDefinition, List<FluidGridItem>>中使用它来动态生成表单。

首先,我生成FluidGridItems并将它们放在hashMap中:

<p:dataList>

然后我按Displaying Hashmap keys and values in a primefaces DataTable中所述转换它们:

private HashMap<PDIDefinition, List<FluidGridItem>> formItems = new HashMap<>();

private void generateModel() {

    for (PDIDefinition pdid : pdiDefinitions) {
        Fragment f = new Fragment();
        f.setDefinition(pdid.getFragmentDefinition());
        fragments.add(f);
        List<FluidGridItem> items = new ArrayList<>();
        formItems.put(pdid, items);

        //((DynamicField)((FluidGridItem)formItems.get(pdid).get(0)).getData()).label;

        for (FragmentValueDefinition fvd : f.getDefinition().getFragmentValues()) {
            FragmentValue fv = new FragmentValue();
            fv.setFragmentValueDefinition(fvd);
            fv.setFragmentId(f.getInner());
            if (f.getValues() == null) {
                f.setValues(new ArrayList<>());
            }
            f.getValues().add(fv);
            fragmentValues.add(fv); //not required?
            DynamicField df = new DynamicField((fv), items.size());
            fields.add(df);

            if ("String".equals(fvd.getType())) {
                items.add(new FluidGridItem(df, "stringValue"));
            }
            if ("Integer".equals(fvd.getType())) {
                items.add(new FluidGridItem(df, "integerValue"));
            }
            if ("Date".equals(fvd.getType())) {
                items.add(new FluidGridItem(df, "dateValue"));
            }
        }

    }

}

最后,在我看来,我使用dataList和fluidGrid生成表单:

public List<Map.Entry<PDIDefinition,List<FluidGridItem>>> getFormItemsForDisplay(){
    Set <Map.Entry<PDIDefinition,List<FluidGridItem>>> s = formItems.entrySet();
    return new ArrayList<>(s);
} 

这会产生我希望的形式。

enter image description here

我的问题是,只有dataList的最后一次迭代的值在服务器上更新(图像中的PDF)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

通过替换

解决了这个问题
<p:dataList var="pdi" value="#{FormGenerator.formItemsForDisplay}" 
    id="all" varStatus="loop" type="none">

通过

<c:forEach var="pdi" items="#{FormGenerator.formItemsForDisplay}"
    id="all" varStatus="loop">

https://zenidas.wordpress.com/recipes/jsf-update-single-entry-in-a-datalist-like-component/获得了想法