我目前正在使用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中创建一百万个临时变量?
答案 0 :(得分:2)
只需使用inputTexts替换下面对话框中的outputTexts;
http://www.primefaces.org/showcase/ui/datatableRowSelectionByColumn.jsf
或
http://www.primefaces.org/showcase/ui/datatableRowSelectionInstant.jsf