我想修改从mysql数据库显示数据的数据表:
<p:dataTable id="contrats" var="contrat" value="${contrat.getContratFromDataBase()}" rowKey="#{contrat.idContrat}"
selection="#{tabBeanContrat.contratTab}" editable="true" editMode="cell" >
<p:column selectionMode="multiple" style="width:2%" />
<p:column headerText="Ref Propale">
<p:cellEditor>
<f:facet name="output"><h:outputText id="refPropale" value="#{contrat.refPropale}" ></h:outputText></f:facet>
<f:facet name="input"><p:inputText id="modelInputrefPropale" value="#{contrat.refPropale}"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Ref Commande">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{contrat.refCommande}"></h:outputText></f:facet>
<f:facet name="input"><p:inputText id="modelInputrefCommande" value="#{contrat.refCommande}"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Description">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{contrat.description}"></h:outputText></f:facet>
<f:facet name="input"><p:inputText id="modelInputdescription" value="#{contrat.description}"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Total jh vendus">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{contrat.chargeVendue}"></h:outputText></f:facet>
<f:facet name="input"><p:inputText id="modelInputchargeVendue" value="#{contrat.chargeVendue}"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Budget (€HT)">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{contrat.budget}"></h:outputText></f:facet>
<f:facet name="input"><p:inputText id="modelInputbudget" value="#{contrat.budget}"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Statut">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{contrat.statut}"></h:outputText></f:facet>
<f:facet name="input"><p:inputText id="modelInputstatut" value="#{contrat.statut}"/></f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
方法getContratFromDataBase()从我的msql数据库中的表中检索数据。 所以问题是当我想要修改单元格时,不考虑新值(不显示新值),因为我使用value =“$ {contrat.getContratFromDataBase()}”因此它将始终显示值的数据库。有没有人有想法解决我的问题。
谢谢!
答案 0 :(得分:0)
诀窍在于您的托管bean getContractsFromDataBase()方法。 每次调用属性时,该方法都不应该询问数据库。
示例:
ArrayList<Contract> contracts = null;
Public List<Contract> getContracts {
if (contracts == null)
contracts = getContractsFromDatabase();
return contracts;
}
修改强>
您想要编辑数据表中的值(editable =“true”editMode =“cell”),因此添加ajax事件以触发单元格更改:
<p:ajax event="cellEdit" listener="#{tabBeanContrat.onCellEdit}" />
在托管bean上添加事件 tabBeanContrat 。
public void onCellEdit(CellEditEvent event) {
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
if(newValue != null && !newValue.equals(oldValue)) {
// apply changes here (call method to update DB)
}
}
答案 1 :(得分:0)
嗨,谢谢你的回答,
更准确地说,这是我的tabBeanContrat bean:
public static ArrayList<Contrat> getContratFromDB() {
try {
PreparedStatement ps = conec.prepareStatement("select * from contrats");
ArrayList<Contrat> al = new ArrayList<Contrat>();
ResultSet rs = ps.executeQuery();
boolean found = false;
while (rs.next()) {
Contrat c = new Contrat();
c.setRefPropale(rs.getString("RefPropale"));
c.setRefCommande(rs.getString("RefCommande"));
c.setDescription(rs.getString("Description"));
c.setChargeVendue(rs.getDouble("ChargeVendue"));
c.setBudget(rs.getFloat("Budget"));
c.setStatut(rs.getString("StatutCharge"));
al.add(c);
found = true;
}
rs.close();
if (found) {
return al;
} else {
return null; // no entires found
}
} catch (Exception e) {
System.out.println("Error In getContratFromDB() -->" + e.getMessage());
return (null);
}
}
然后在我的Contrat课程中,我有这个方法:
public ArrayList<Contrat> getContratFromDataBase() {
return TabBeanContrat.getContratFromDB();
}
所以我必须把它放在我的tabBeanContrat @ManagedBean(name =“tabBeanContrat”)中:
private List<Contrat> contrats = new ArrayList<Contrat>();
public List<Contrat> getContrats() {
if (contrats == null)
contrats = getContratFromDB();
return contrats;
}
Finnaly我必须将我的数据表的值从value="${contrat.getContratFromDataBase()}"
更改为value="${tabBeanContrat.contrats}"