【发布时间】:2011-01-14 08:55:10
【问题描述】:
我目前在 JSF 2.0 中运行我的 Web 应用程序,它也使用 Primefaces 2.2RC2。
我知道 primefaces 使您能够拥有可编辑的行,但对于我的项目,如果用户单击表中的 commandButton 会显示一个预先填充了该特定行值的对话框,并且用户可以编辑那样排。
我得到这个工作的唯一方法是在包含命令按钮的列中,将该行内容作为参数传递,如下例所示:
<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 中创建虚拟临时全局变量来设置参数,这样当我的对话框打开时它可以引用这样的值
//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 中创建一百万个临时变量?
【问题讨论】:
标签: jsf jsf-2 primefaces