2016-09-19 40 views
0

我试图使用选择模式从数据表中选择一些项目,并指定使用CellEditor选择的项目的数量,但CellEditor未获取所有值点击“显示”按钮后进入,它只会得到我在CellEditor列中输入的最后一个值。请我需要有人帮助我!数据表中的单元格编辑器在JSF中只获取一个值

我的XHTML代码

<p:dataTable editable="true" editMode="cell" id="change" selection="#{openJobOrderBean.selectedMaterials}" rowKey="#{openJob.materialId}" 
       rows="5" var="openJob" value="#{openJobOrderBean.smtOrder}" paginator="true" paginatorPosition="bottom" 
       paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
       rowsPerPageTemplate="5,10,15"> 

    <p:ajax immediate="true" process="@this" event="cellEdit" listener="#{openJobOrderBean.onCellEdit}" update="change" /> 
    <p:column selectionMode="multiple" style="text-align: center; width: 80px" headerText="Select Requested Materials" /> 
    <p:column headerText="Quantity Requested(click to edit)" style="width: 150px; text-align: center" class="columnedit" > 
     <p:cellEditor> 
      <f:facet name="output"><h:outputText value="#{openJobOrderBean.quantity}" /></f:facet> 
      <f:facet name="input"><p:inputText label="Quantity Requested(editable)" value="#{openJobOrderBean.quantity}" style="width: 150px" /> 

      </f:facet> 
     </p:cellEditor> 
    </p:column> 

    <p:column style="text-align: center" headerText="Material Name" filterBy="#{openJob.materialName}"> 
     <h:outputText value="#{openJob.materialName}" /> 
    </p:column> 
    <p:column style="text-align: center" headerText="Available Quantity" > 
     <h:outputText value="#{openJob.materialQuantity}" /> 
    </p:column> 
    <f:facet name="footer"> 
     <p:commandButton id="shows" oncomplete="PF('multimaterials').show()" value="Show" process="change" update=":mainform:materialdetails"/> 
    </f:facet> 
</p:dataTable> 

<p:dialog header="Selected Materials" widgetVar="multimaterials" minimizable="true" maximizable="true" 
      showEffect="shake" hideEffect="explode" width="500"> 
    <p:panel style="width: 500px" id="materialdetails" > 

     <ui:repeat value="#{openJobOrderBean.selectedMaterials}" var="openJob"> 

      <p:panelGrid columns="1" layout="grid"> 
         #{openJob.materialName} - #{openJobOrderBean.quantity} 
      </p:panelGrid> 

     </ui:repeat> 
    </p:panel> 
</p:dialog> 

我的豆

private List<OpenJobOrderBean> powerHouseOrder; 
    private List<OpenJobOrderBean> selectedMaterials; 
private String materialName; 
private int materialQuantity; 
private int materialId; 
private int quantity; 

public String getMaterialName() { 
    return materialName; 
} 

public void setMaterialName(String materialName) { 
    this.materialName = materialName; 
} 

public int getMaterialQuantity() { 
    return materialQuantity; 
} 

public void setMaterialQuantity(int materialQuantity) { 
    this.materialQuantity = materialQuantity; 
} 

public int getMaterialId() { 
    return materialId; 
} 

public void setMaterialId(int materialId) { 
    this.materialId = materialId; 
} 

public int getQuantity() { 
    return quantity; 
} 

public void setQuantity(int quantity) { 
    this.quantity = quantity; 
} 

public List<OpenJobOrderBean> getSelectedMaterials() { 
    return selectedMaterials; 
} 

public void setSelectedMaterials(List<OpenJobOrderBean> selectedMaterials) { 
    this.selectedMaterials = selectedMaterials; 
} 

public List<OpenJobOrderBean> getPowerHouseOrder() { 
    try { 
     this.powerHouseOrder = new OpenJobOrder().retrievePowerHouseMaterials(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "", e.getMessage()); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
    return powerHouseOrder; 
} 

public void onCellEdit(CellEditEvent event) { 
    Object oldValue = event.getOldValue(); 
    Object newValue = event.getNewValue(); 
    FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue); 
    FacesContext.getCurrentInstance().addMessage(null, msg); 

} 

This is the result before clicking the SHOW button

This is the result after selecting and clicking the SHOW button

回答

0

你为什么这样做?

#{openJob.materialName} - #{openJobOrderBean.quantity} 

为了得到这份工作的数量,你得改:

#{openJob.materialName} - #{openJob.quantity} 

此外,这看起来非常糟糕。不要存储你的bean的列表。创建openJob一个实体类和存储这些实体的名单..

+0

我已经更改为: '#{} openJob.materialName - #{openJob.quantity}' 但它变得0作为量均通过。 @Attila –

+0

请我不明白你为openJob创建实体类的含义... –

+0

你应该在cellEditor中更改#{openJob.quantity}以及.. 通过创建一个实体类,我的意思是你应该创建一个具有所有属性(名称,数量,ID等)和getter/setter方法的类,并且将这些列表存储在bean中。你应该有一个bean用于你的xhtml页面,而不是在同一个bean中存储一个bean列表。 –

相关问题