使用JSF 2.0中的Dialog编辑可编辑数据表

时间:2011-01-14 08:55:10

标签: jsf jsf-2 primefaces

我目前正在使用JSF 2.0运行我的Web应用程序,它也使用了Primefaces 2.2RC2。

我知道primefaces让你能够拥有可编辑的行,但是对于我的项目,我更希望用户点击表格中的commandButton,显示预先填充了特定行值的对话框,并且用户可以编辑那条路。

我使用它的唯一方法是在包含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中创建一百万个临时变量?

1 个答案:

答案 0 :(得分:2)