1

ajax onCellEdit イベントメソッドを呼び出して、データテーブルのセル編集値をデータベースに更新しようとしています。このメソッドでは、セル編集列のヘッダー名と更新クエリで取得した新しい値を使用しています。フィールド名はヘッダー名とは異なり、データベース フィールド名を変更できません。また、データベース フィールド名をデータテーブル ヘッダーに含めることもできません。データベースを更新する方法を教えてください。

データベース操作に JDBC を使用しています。私のコードは以下とまったく同じです。

私のJSFページ

<h:form id="form">

  <p:growl id="messages" showDetail="true" />

  <p:dataTable id="multiCars" var="car"
     value="#{tableBean.mediumCarsModel}" paginator="true" rows="10"
     selection="#{tableBean.selectedCars}" editable="true" editMode="cell">

     <f:facet name="header"> 
        Checkbox Based Selection 
    </f:facet>
     <p:ajax event="cellEdit" listener="#{tableBean.onCellEdit}"
        update=":form:messages" />

     <p:column selectionMode="multiple" style="width:2%" />


     <p:column headerText="Model" style="width:25%">
        <p:cellEditor>
           <f:facet name="output">
              <h:outputText value="#{car.model}" />
           </f:facet>
           <f:facet name="input">
              <p:inputText id="modelInput" value="#{car.model}"
                 style="width:96%" />
           </f:facet>
        </p:cellEditor>
     </p:column>

     <p:column headerText="Year" style="width:25%">
        <p:cellEditor>
           <f:facet name="output">
              <h:outputText value="#{car.year}" />
           </f:facet>
           <f:facet name="input">
              <p:inputText value="#{car.year}" style="width:96%" label="Year" />
           </f:facet>
        </p:cellEditor>
     </p:column>

     <p:column headerText="Manufacturer" style="width:25%">
        <p:cellEditor>
           <f:facet name="output">
              <h:outputText value="#{car.manufacturer}" />
           </f:facet>
           <f:facet name="input">
              <p:inputText value="#{car.manufacturer}" style="width:96%"
                 label="Year" />
           </f:facet>
        </p:cellEditor>
     </p:column>


     <p:column headerText="Color" style="width:25%">
        <p:cellEditor>
           <f:facet name="output">
              <h:outputText value="#{car.color}" />
           </f:facet>
           <f:facet name="input">
              <p:inputText value="#{car.color}" style="width:96%" label="Year" />
           </f:facet>
        </p:cellEditor>
     </p:column>

     <f:facet name="footer">
        <p:commandButton id="multiViewButton" value="View"
           icon="ui-icon-search" actionListener="#{tableBean.getSelection}" />
     </f:facet>
  </p:dataTable>

私のマネージド Bean onCellEdit メソッド

public void onCellEdit(CellEditEvent event) { 
  System.out.println("inside cell edit");

  UIColumn col= event.getColumn();
  DataTable o=(DataTable) event.getSource();
  Object oldValue = event.getOldValue();  //here i get old value
  Object newValue = event.getNewValue(); //new value
  Car info=(Car)o.getRowData();
  String newModel=info.getModel();//primary key

  System.out.println("row index in event method "+event.getRowIndex());
  System.out.println("old value"+oldValue);
  System.out.println("new value"+newValue);
  System.out.println("column2 :"+col.getHeaderText());//header text value


  try{


     updateStmt=connection.createStatement();


     String query = "update test set " + col.getHeaderText() +"= '"+ newValue +"' where Model = '"+newModel+"'";

     int i=updateStmt.executeUpdate(query);
     if(i!=0)
        System.out.println("updated!!!");
     else
        System.out.println("not updated!!!");

  }
  catch (Exception e) {
     e.printStackTrace();
  }


  if(newValue != null && !newValue.equals(oldValue)) { 
     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
  }

}

4

0 に答える 0