2011-01-14 4 views
1

Ich verwende derzeit meine Webanwendung in JSF 2.0, es verwendet auch Primefaces 2.2RC2.Editierbare Datentabelle mit einem Dialog in JSF 2.0

Ich weiß, dass primefaces Ihnen die Möglichkeit gibt, editierbare Zeilen zu haben, aber für mein Projekt würde ich bevorzugen, wenn ein Benutzer auf ein commandButton innerhalb der Tabelle klickt, dass ein Dialogfeld mit diesen bestimmten Zeilenwerten vorgelagert angezeigt wird und der Benutzer bearbeiten kann die Reihe so.

Die einzige Art, wie ich dies in der Spalte Arbeit bekommen habe, die auf den Befehl enthält, das unten wie das Beispiel Inhalte als params Reihen passieren:

<p:dataTable var="car" value="#{myBean.cars}" id="carList"> 
    <h:column> 
     <h:inputText value="#{car.id}" style="width:100%"/> 
    </h:column> 

    <h:column> 
     <h:inputText value="#{car.name}" style="width:100%"/> 
    </h:column> 
    <h:column> 
     <h:commandButton actionListener=#{myBean.updateRow} onsuccess="editCardDialog.show()" > 
      <f:param name="carId" value=#{car.id} /> 
      <f:param name="carName" value=#{car.name} /> 
     </h:commandButton> 
    </h:column> 

    ... 
</p:dataTable> 

So ist meine Frage, die derzeit die einzige wie ich dies an die Arbeit bekommen haben, ist in meinem Backing Bean Dummy temporäre globale Variablen zu erstellen, um die params zu setzen, um so, wenn mein Dialog öffnet er die Werte wie diese

 //myBean.java 
    private String tempCarId; 
    private String tempCarName; 

    public void setTempCarId(String tempCarId) { 
      this.tempCarId = carId; 
    } 

    public String getTempCarId() { 
      return tempCarId; 
    } 

    public void setTempCarName(String tempCarName) { 
      this.tempCarName = carName; 
    } 

    public String getTempCarName() { 
      return tempCarName; 
    } 

    public void updateRow(ActionEvent event) { 

      String carId = FaceContext...getParameterMap("carId"); 
      String carName = FacesContext...getParameterMap("carName"); 

      setTempCarId(carId); 
      setTempCarName(carName);  
    } 

dann im Dialog verweisen kann ich nur Referenz diese Temperaturvariablen

<p:dialog> 
     <h:inputText value=#{myBean.tempCarId} /> 
     <h:inputText value=#{myBean.tempCarName} /> 
    </p:dialog> 

Ich bin mir nicht sicher, ob dies der richtige Weg ist. Mein Bauchgefühl sagt mir das nicht, weil es extrem überflüssig erscheint, temporäre Variablen in meiner Bean zu erstellen, nur damit ich sie an den Dialog weitergeben kann. Kennt jemand eine bessere prägnante Art, dies zu tun, so muss ich nicht eine Million temporäre Variablen in meiner Backing Bean erstellen?

Antwort