2015-06-11 39 views
0

在我的bean中,我有一個HashMap<PDIDefinition, List<FluidGridItem>>,我使用<p:dataList>來動態生成一個表單。只有來自p:dataList的最後一個pe:fluidGrid迭代的值在模型中更新

首先,我產生了FluidGridItems並將其放置在HashMap中:

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")); 
      } 
     } 

    } 

} 

然後我將它們轉換爲Displaying Hashmap keys and values in a primefaces DataTable說:

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

Finaly在我看來,我生成使用DataList和形式fluidGrid:

<p:dataList var="pdi" value="#{FormGenerator.formItemsForDisplay}" id="all" varStatus="loop" type="none"> 
     <p:panel id="panel" header="#{pdi.key.getFragmentDefinition().getFragmentName()}" style="margin-bottom:1em; width:100%;"> 

      <pe:fluidGrid id="fluidGrid" value="#{pdi.value}" var="data" 
          hGutter="20" vGutter="10" widgetVar="fgwv_#{loop.index}"> 

       <pe:fluidGridItem type="stringValue" id="txt_"> 
        <div class="dynaFormLabel"> 
         <p:outputLabel for="txt" value="#{data.label}"/> 
        </div> 
        <p:inputText id="txt" value="#{data.value}"/> 
       </pe:fluidGridItem> 
       <pe:fluidGridItem type="integerValue" id="int_"> 
        <div class="dynaFormLabel"> 
         <p:outputLabel for="int" value="#{data.label}"/> 
        </div> 
        <p:spinner id="int" value="#{data.value}" /> 
       </pe:fluidGridItem> 
       <pe:fluidGridItem type="dateValue" id="cal_"> 
        <div class="dynaFormLabel"> 
         <p:outputLabel for="cal" value="#{data.label}"/> 
        </div> 
        <p:calendar id="cal" value="#{data.value}" showOn="button"/> 
       </pe:fluidGridItem> 

      </pe:fluidGrid> 

     </p:panel> 
    </p:dataList> 

This results in the我希望的形式。

enter image description here

我的問題是,只從數據列表的最後一次迭代的值更新服務器(圖像中的PDF)上。

感謝您的幫助。

回答

相關問題