2014-03-30 525 views
0

我對JSF非常陌生,前幾天我剛開始使用它,並試圖學習教程。但我不知道爲什麼這不起作用。 我正在使用PrimeFaces 3.5的JSF 2.1。 問題是當我提交表單時,值不是更新的屬性。只有最後一個inputText被更新。值不會更新bean屬性

我錯過了什麼?

查看:

<h:body> 

<h:form id="profilForm"> 


    <p:growl id="msg" showDetail="true" life="3000" /> 
    <p:panel header="Profil" style="width: 460px;"> 

     <h:panelGrid id="loginPanel" columns="2"> 

      <h:outputLabel for="idPracownik" value="Id Pracownika" /> 

      <h:inputText id="idPracownik" value="#{pracownikControl.pracownik.idPracownik}" label="Id Pracownika"/> 


      <p:outputLabel for="imie" value="Imię" /> 

      <p:inputText id="imie" value="#{pracownikControl.pracownik.imie}" label="Imię" /> 


      <h:outputLabel for="nazwisko" value="Nazwisko" /> 

      <p:inputText id="nazwisko" value="#{pracownikControl.pracownik.nazwisko}" /> 


      <h:outputLabel for="kraj" value="Kraj" /> 

      <h:inputText id="kraj" value="#{pracownikControl.pracownik.kraj}" label="Kraj" /> 


      <h:outputLabel for="wojewodztwo" value="Województwo" /> 

      <h:inputText id="wojewodztwo" value="#{pracownikControl.pracownik.wojewodztwo}" label="Województwo" /> 



      <h:outputLabel for="miejscowosc" value="Miejscowość" /> 

      <h:inputText id="miejscowosc" value="#{pracownikControl.pracownik.miejscowosc}" label="Miejscowość" /> 


      <h:outputLabel for="adres" value="Adres" /> 

      <h:inputText id="adres" value="#{pracownikControl.pracownik.adres}" label="Adres" /> 



      <h:outputLabel for="kodPocztowy" value="Kod Pocztowy" /> 

      <h:inputText id="kodPocztowy" value="#{pracownikControl.pracownik.kodPocztowy}" label="Kod Pocztowy" /> 



      <h:outputLabel for="telefon" value="Telefon" /> 

      <h:inputText id="telefon" value="#{pracownikControl.pracownik.telefon}" label="Telefon" /> 


      <h:outputLabel for="email" value="E-mail" /> 

      <p:inputText id="email" value="#{pracownikControl.pracownik.email}" label="E-mail" /> 


      <h:outputLabel for="niepelnosprawnosc" value="Niepełnosprawność" /> 

      <p:selectBooleanCheckbox id="niepelnosprawnosc" value="#{pracownikControl.pracownik.niepelnosprawnosc}" label="Niepełnosprawność" /> 

     </h:panelGrid> 

    </p:panel> 

      <p:commandButton action="#{pracownikControl.updatePracownik()}" value="Zmień" /> 



</h:form> 

豆:

public class Pracownik implements java.io.Serializable{ 

private int idPracownik; 
private int idUzyt; 
private int idPliki; 
private String imie; 
private String nazwisko; 
private String poziomWyksz; 
private Date dataUrodzenia; 
private String adres; 
private String kodPocztowy; 
private String miejscowosc; 
private String kraj; 
private String wojewodztwo; 
private int telefon; 
private String email; 
private boolean niepelnosprawnosc; 



public Pracownik() 
{ 

} 

public Pracownik(int idPracownik, int idUzyt, int idPliki, String imie, String nazwisko, String poziomWyksz, Date dataUrodzenia, String adres, String kodPocztowy, String miejscowosc, String kraj, String wojewodztwo, int telefon, String email, boolean niepelnosprawnosc) 
{ 
    this.idPracownik = idPracownik; 
    this.idUzyt = idUzyt; 
    this.idPliki = idPliki; 
    this.imie = imie; 
    this.nazwisko = nazwisko; 
    this.poziomWyksz = poziomWyksz; 
    this.dataUrodzenia = dataUrodzenia; 
    this.adres = adres; 
    this.kodPocztowy = kodPocztowy; 
    this.miejscowosc = miejscowosc; 
    this.kraj = kraj; 
    this.wojewodztwo = wojewodztwo; 
    this.telefon = telefon; 
    this.email = email; 
    this.niepelnosprawnosc = niepelnosprawnosc; 
} 

public int getIdPracownik() { 
    return idPracownik; 
} 

public void setIdPracownik(int idPracownik) { 
    this.idPracownik = idPracownik; 
} 

public int getIdUzyt() { 
    return idUzyt; 
} 

public void setIdUzyt(int idUzyt) { 
    this.idUzyt = idUzyt; 
} 

public int getIdPliki() { 
    return idPliki; 
} 

public void setIdPliki(int idPliki) { 
    this.idPliki = idPliki; 
} 

public String getImie() { 
    return imie; 
} 

public void setImie(String imie) { 
    this.imie = imie; 
} 

public String getNazwisko() { 
    return nazwisko; 
} 

public void setNazwisko(String nazwisko) { 
    this.nazwisko = nazwisko; 
} 

public String getPoziomWyksz() { 
    return poziomWyksz; 
} 

public void setPoziomWyksz(String poziomWyksz) { 
    this.poziomWyksz = poziomWyksz; 
} 

public Date getDataUrodzenia() { 
    return dataUrodzenia; 
} 

public void setDataUrodzenia(Date string) { 
    this.dataUrodzenia = string; 
} 

public String getAdres() { 
    return adres; 
} 

public void setAdres(String adres) { 
    this.adres = adres; 
} 

public String getKodPocztowy() { 
    return kodPocztowy; 
} 

public void setKodPocztowy(String kodPocztowy) { 
    this.kodPocztowy = kodPocztowy; 
} 

public String getMiejscowosc() { 
    return miejscowosc; 
} 

public void setMiejscowosc(String miejscowosc) { 
    this.miejscowosc = miejscowosc; 
} 

public String getKraj() { 
    return kraj; 
} 

public void setKraj(String kraj) { 
    this.kraj = kraj; 
} 

public String getWojewodztwo() { 
    return wojewodztwo; 
} 

public void setWojewodztwo(String wojewodztwo) { 
    this.wojewodztwo = wojewodztwo; 
} 

public int getTelefon() { 
    return telefon; 
} 

public void setTelefon(int telefon) { 
    this.telefon = telefon; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public boolean isNiepelnosprawnosc() { 
    return niepelnosprawnosc; 
} 

public void setNiepelnosprawnosc(boolean niepelnosprawnosc) { 
    this.niepelnosprawnosc = niepelnosprawnosc; 
} 

}

控制:

import java.sql.SQLException; 
    import java.text.ParseException; 

    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.SessionScoped; 

    import javax.faces.context.FacesContext; 
    import javax.servlet.http.HttpSession; 

    import dao.PracownikDAO; 
    import entity.Pracownik; 

    @ManagedBean(name = "pracownikControl") 
    @ViewScoped 

    public class PracownikControl implements java.io.Serializable { 

private Pracownik pracownik; 
private Pracownik prac; 

public PracownikControl() 
{ 

} 


public Pracownik getPracownik() throws SQLException, ParseException { 

    FacesContext context = FacesContext.getCurrentInstance(); 
     HttpSession session = (HttpSession)context.getExternalContext().getSession(false); 
    System.out.println(pracownik.getTelefon()); 
    int id = (Integer)session.getAttribute("SesjaId"); 
    pracownik = PracownikDAO.wyswietl(id); 

    return pracownik; 
} 

    public Pracownik updatePracownik() throws SQLException, ParseException { 

FacesContext context = FacesContext.getCurrentInstance(); 
    HttpSession session = (HttpSession)context.getExternalContext().getSession(false); 
    int id = (Integer)session.getAttribute("SesjaId"); 
     pracownik = PracownikDAO.zmienDane(pracownik, id); 
    return pracownik; 
} 

public void setPracownik(Pracownik pracownik) { 
    this.pracownik = pracownik; 
} 

}

+0

你是怎麼確定只有最後一個字段被更新的? –

+0

我在我的數據庫中看到它,當拋出控制檯 – Felek

+0

我看到的第一個問題是你使用'@ SessionScoped'和你在構造函數中放置的邏輯。你確實意識到邏輯將在該會話的整個生命週期中只執行一次? – kolossus

回答

0

使用屬性partialSubmitajaxprocess試試這個代碼:

<p:commandButton action="#{pracownikControl.updatePracownik()}" value="Zmień" ajax="true" partialSubmit="true" process="@form" /> 

您可以使用組件的ID已發送到處理過(表單,您的面板,或其他):

<p:commandButton action="#{pracownikControl.updatePracownik()}" value="Zmień" ajax="true" partialSubmit="true" process=":profilForm" /> 

該屬性過程可用於說明將爲您的方法發送的範圍。

0

您必須更新所有字段的配置文件格式,以便在命令按鈕中使用「更新」屬性。所以,試試這個:

<p:commandButton action="#{pracownikControl.updatePracownik()}" value="Zmień" 
    update=":profilForm" /> 
+1

如果你不解釋爲什麼 – Gimby

+0

它不是一個真正的答案不幸的是它沒有幫助,但我添加了我的控制文件中的代碼,所以也許它會幫助 – Felek

0

我確實有同樣的問題,我看到你忘了說你想要更新。只需設置update="@form"。因爲p:commandButton在表單內。

<p:commandButton action="#{pracownikControl.updatePracownik()}" value="Zmień" update="@form" />