我有一个<h:dataTable>
,其列定义为此
<h:column>
<f:facet name="header">
<h:outputText value="Price"/>
</f:facet>
<h:outputText value="#{p.price}" rendered="#{not p.editable}"></h:outputText>
<h:inputText value="#{p.price}" rendered="#{p.editable}"></h:inputText>
</h:column>
使用
成功填充<h:dataTable>
<h:dataTable id="userTable" value="#{gnome.productList}"
var="p">
支持bean #gnome
是一个@ViewScoped
bean,productList
加载到postconstructor中并具有正常的getter。
@PostConstruct
public void init() {
productList = gnomeFacade.findAll();
}
public List<Gnome> getProductList() {
return productList;
}
按下<h:inputText>
时会呈现<h:commandLink>
,并允许我修改字段中的数据。然后,假定使用在<h:commandButton>
<h:dataTable>
来保存数据
<h:commandButton value="Save changes!" action="#{gnome.saveAction}"/>
调用此方法
public String saveAction() {
System.out.println("DEBUG: Trying to save edited gnome...");
for (Gnome g : productList) {
gnomeFacade.edit(g);
}
return null;
}
我在gnomeFacade.edit()
方法中添加了一些调试打印输出,以便能够查看正在合并的数据。 productList
实体中的所有属性都未使用其新值进行保存。我最初的想法是<h:dataTable>
重申了productList
的值,但是因为我将它加载到postconstructor中,这应该不是问题吗?
为什么在更改<h:inputText>
?
修改 完整的.xhtml文档: https://pastee.org/75t3e