2017-06-04 31 views
0

我有mainpage.xhtml,它在我的数据库中显示整个记录并允许我编辑它们。如果按照编辑按钮,则调用mainPageController.edit()函数,该函数填充MainPageConroller类中的_bilgi变量,然后重定向到edit.xhtml页面。使用JSF编写语句进行数据库更新

edit.xhtml页面上,它基本上显示了之前在MainPageController class中填充的_bilgi的值。有没有问题,到这里(有可能是,但我没有意识到这一点。)

当我想更新这些变量中的一个,如baslik创建了一个方法MainPageControllerbilgiDAO调用updateBilgi(_bilgi)类。

UpdateBilgi它很清楚它做了什么,但它没有更新表。我感兴趣的是,当我调试并遵循变量时,一切都很顺利,但最终它不会更新。

另一件事是当我只把一个字符串放在BilgilerDAO中,例如ps.setString(1, "aqa1")它可以工作,但ps.setString(2, bilgi.getBaslik())不是eventho 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

我种解决问题。

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

只读= “真”导致它返回null。我现在删除它,它的工作原理是我想要的。尽管如此,我仍然希望显示它们,但不能编辑。