修改JSF UIComponent时实体属性未更改

时间:2014-01-05 21:35:39

标签: java jsf jsf-2 datatable ejb

我有一个<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

0 个答案:

没有答案