2011-01-14 52 views
1

我目前在JSF 2.0中運行我的Web應用程序,它也使用Primefaces 2.2RC2。在JSF 2.0中使用對話框編輯數據表

我知道primefaces讓你具有可編輯行的能力,但對於我的項目,我更喜歡如果用戶單擊表中的某個commandButton,顯示的對話框中預先填充了特定行值並且用戶可以編輯那一排。

我得到這個工作的唯一方法是在包含命令按鈕欄,通過該行的內容如下面的例子PARAMS:

<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> 

所以我的問題是這樣的,目前唯一我得到這個工作的方式是我支持bean中創建虛擬臨時全局變量來把params如此,當我的對話框打開它,我將只是參考的對話框中引用這樣

 //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);  
    } 

的值,則那些臨時變量

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

我不確定這是否是正確的做法。我的直覺告訴我,這不是因爲在我的Bean中創建臨時變量看起來非常冗餘,所以我可以將它們傳遞給對話框。有誰知道這樣做的更好更簡潔的方式,所以我不必在我的支持bean中創建一百萬個臨時變量?

回答

相關問題