2017-06-04 2 views
0

mainpage.xhtml私のデータベースにレコード全体が表示され、編集することができます。 ボタンを編集すると、mainPageController.edit()関数が呼び出され、MainPageConrollerクラスの_bilgi変数に値が設定され、edit.xhtmlページにリダイレクトされます。JSFのPrepared Statementを使用したデータベース更新

edit.xhtmlページでは、基本的に_bilgiの値がMainPageController classに表示されます。何の問題がまでここにありません(おそらくそこにあるが、私はそれに気づいていないです。)

私はbilgiDAOでupdateBilgi(_bilgi)を呼び出すMainPageControllerメソッドを作成し、そのようなbaslikとしてこれらの変数の1更新したいときクラス。

UpdateBilgiでは、まだテーブルを更新していないことは明らかです。私が変数をデバッグしてフォローすると、すべてがうまくいくが、結局は更新されないということは興味深い。

もう一つは、私がBilgilerDAOのような文字列を入力すると、ps.setString(1, "aqa1")のように動作しますが、ps.setString(2, bilgi.getBaslik())は変更された値を返すわけではありません。

何が間違っている可能性がありますか? 事前に回答いただきありがとうございます。

私は十分にはっきりしていることを望みます。

編集:私はグリッチを発見しました。 BilgilerDAO関数updateBilgi(Bilgi bilgi) 変数bilgiは_bilgiからIDを取得しませんが、他の変数を取得します。なぜそれはIDを取得しないだろうか?

mainpage.xhtml

<h:form id="bilgiForm"> 
    <h:dataTable id="bilgiTable" value="#{mainPageController.bilgiListesi}" 
     var="bilgiler" border="1"> 
     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Başlık" /> 
      </f:facet> 
      <h:outputText value="#{bilgiler.baslik}" /> 
      <f:facet name="footer"> 
       <h:outputText value="Başlık" /> 
      </f:facet> 
     </h:column> 

     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Bilgi Metni" /> 
      </f:facet> 
      <h:outputText value="#{bilgiler.bilgi}" /> 
      <f:facet name="footer"> 
       <h:outputText value="Bilgi Metni" /> 
      </f:facet> 
     </h:column> 


     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Bilgi Metni" /> 
      </f:facet> 
      <h:outputText value="#{bilgiler.bilgi}" /> 
      <f:facet name="footer"> 
       <h:outputText value="Bilgi Metni" /> 
      </f:facet> 
     </h:column> 

     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Bilgi Metni" /> 
      </f:facet> 
      <h:graphicImage 
       value="https://canakkale.000webhostapp.com/showImage.php/?name=#{bilgiler.img.name}" /> 
      <f:facet name="footer"> 
       <h:outputText value="Bilgi Metni" /> 
      </f:facet> 
     </h:column> 

     <h:column> 
      <fcore:facet name="header">Edit</fcore:facet> 
      <h:commandButton action="edit" value="Edit" 
       actionListener="#{mainPageController.edit()}"> 
       <fcore:param name="id" value="#{bilgiler.id}" /> 
      </h:commandButton> 
     </h:column> 
    </h:dataTable> 
</h:form> 




    <fcore:view> 
     <h:form> 
      <fcore:view> 
       <h:form> 
        <h1>Update</h1> 
        <h:panelGrid border="" cellpadding="20" cellspacing="20" 
         columns="3"> 
         <h:outputLabel value="Bilgi ID" /> 
         <h:inputText value="#{mainPageController._bilgi.id}" 
          readonly="true" required="true" requiredMessage="Id is Required" 
          id="bilgiID"> 
         </h:inputText> 
         <h:message for="bilgiID" /> 

         <h:outputLabel value="Tag" /> 
         <h:inputText value="#{mainPageController._bilgi.tag}" 
          readonly="true" required="true" 
          requiredMessage="Tag Girmeniz Gereklidir." id="bilgiTag"> 
         </h:inputText> 
         <h:message for="bilgiTag" /> 
         <h:outputLabel value="Başlık" /> 
         <h:inputText value="#{mainPageController._bilgi.baslik}" 
          required="true" requiredMessage="Başlık Girmeniz Gereklidir." 
          id="bilgiBaslik"> 
         </h:inputText> 
         <h:message for="bilgiBaslik" /> 


         <h:outputLabel value="Bilgi Metni" /> 
         <h:inputTextarea value="#{mainPageController._bilgi.bilgi}" 
          required="true" requiredMessage="Başlık Girmeniz Gereklidir." 
          id="bilgiBilgi"> 
         </h:inputTextarea> 
         <h:message for="bilgiBilgi" /> 


         <h:outputLabel value="Image URL" /> 
         <h:inputText value="#{mainPageController._bilgi.img.name}" 
          required="true" requiredMessage="Başlık Girmeniz Gereklidir." 
          readonly="true" id="bilgiImgName"> 
         </h:inputText> 
         <h:message for="bilgiImgName" /> 

         <h:outputLabel value="Başlık" /> 
         <input type="file" value="#{mainPageController._bilgi.img.image}" /> 
         <h:commandButton action="#{mainPageController.updateRecord()}" 
          value="Update"> 
         </h:commandButton> 
        </h:panelGrid> 
       </h:form> 
      </fcore:view> 


     </h:form> 
    </fcore:view> 
</h:body> 
</html> 

MainPageControllerクラス

@ManagedBean 
    public class MainPageController implements Serializable { 

     List<Bilgi> bilgiListesi = new ArrayList<Bilgi>(); 
     private Bilgi _bilgi = new Bilgi(); 
     private static final long serialVersionUID = 1L; 

     BilgilerDAO bilgiDao = new BilgilerDAO(); 
     ImageDAO imgDao = new ImageDAO(); 

     public MainPageController() {// Default Constructor 
      try { 
       bilgiListesi = showAllRecords(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 

     public List<Bilgi> showAllRecords() throws SQLException { 
      return bilgiDao.getAllBilgiler(); 
     } 

     public List<Image> showAllImages() throws Exception { 
      return imgDao.getAllImages(); 

     } 

     public void updateRecord() { 
      try { 
       bilgiDao.updateBilgi(_bilgi); 
       //imgDao.updateImage(_bilgi.getImg()); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 

     public void edit() { 
      FacesContext fc = FacesContext.getCurrentInstance(); 
      int id; 
      HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest(); 
      id = Integer.parseInt(request.getParameter("id")); 
      try { 
       bilgiListesi = bilgiDao.getAllBilgiler(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      for (Bilgi bilgi : bilgiListesi) { 
       if (bilgi.getId() == id) { 
        _bilgi.setBaslik(bilgi.getBaslik()); 
        _bilgi.setBilgi(bilgi.getBilgi()); 
        _bilgi.setImg(bilgi.getImg()); 
        _bilgi.setTag(bilgi.getTag()); 
        _bilgi.setId(bilgi.getId()); 
       } 

      } 
     } 

     public void edit(Bilgi bilgi) { 
      for (Bilgi existing : getBilgiListesi()) { 
       existing.setEditable(false); 
      } 
      bilgi.setEditable(true); 
     } 


    } 

BilgilerDAO

@Override 
    public String updateBilgi(Bilgi bilgi) throws Exception { 
     String sql = "UPDATE bilgiler SET bilgi=?, baslik =? WHERE id=? "; 
     ps = DatabaseConnection.getConnection().prepareStatement(sql); 

     ps.setString(1, "aqa1"); 
     ps.setString(2, bilgi.getBaslik()); 
     ps.setInt(3, bilgi.getId()); 

     int ex = ps.executeUpdate(); 
     if (ex > 0) { 
      System.err.println("coodld"); 
     } 
     ps.close(); 
     return "mainpage"; 

    } 

答えて

0

私は種類の問題を解決しました。

このXHTMLライン
<h:inputText value="#{mainPageController._bilgi.id}" readonly="true" required="true" requiredMessage="Id is Required" id="bilgiID"> 

読み取り専用= "true" が、それはnullを返し引き起こしました。私はそれを削除しました。しかし、私はまだそれらを表示したいが編集可能ではない。

関連する問題