2017-06-04 2 views
0

J'ai mainpage.xhtml qui affiche des enregistrements entiers dans ma base de données et me permet de les éditer. En cas de clic Modifier le bouton il appelle la fonction mainPageController.edit() qui remplit la variable _bilgi dans la classe MainPageConroller puis redirige vers la page edit.xhtml.Mise à jour de base de données avec instruction préparée dans JSF

In edit.xhtml page affiche les valeurs de _bilgi qui sont remplies auparavant dans MainPageController class. Il n'y a aucun problème jusqu'à ici (sans doute il y a, mais je ne suis pas au courant.)

Quand je veux mettre à jour l'une de ces variables telles que Başlık J'ai créé une méthode dans MainPageController qui appelle updateBilgi(_bilgi) dans bilgiDAO classe.

Dans UpdateBilgi il est assez clair ce qu'il fait pourtant il ne met pas à jour la table. Il est intéressant pour moi que quand je débogue et que je suive les variables, tout se passe bien mais à la fin ça ne se met pas à jour.

Une autre chose est quand je mets juste une chaîne dans BilgilerDAO tel est ps.setString(1, "aqa1") cela fonctionne mais ps.setString(2, bilgi.getBaslik()) ne fait pas bilgi.getBaslik() renvoie la valeur changée.

Qu'est-ce qui pourrait ne pas fonctionner? Merci pour les réponses à l'avance.

J'espère que je suis assez clair.

Editer: J'ai trouvé le pépin. Dans BilgilerDAO la fonction updateBilgi(Bilgi bilgi) la variable bilgi n'obtient pas l'id de _bilgi mais obtient d'autres variables. Pourquoi ça n'obtiendrait pas l'identifiant?

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 Classe

@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"; 

    } 

Répondre

0

Je genre de la question résolu.

<h:inputText value="#{mainPageController._bilgi.id}" readonly="true" required="true" requiredMessage="Id is Required" id="bilgiID"> 

dans cette ligne xhtml readonly = "true" causé retour nul. Je l'ai enlevé maintenant ça fonctionne comme je le voulais. Cependant, je veux toujours qu'ils soient affichés mais pas éditables.