JSF无法将对数据表行的更改保存到数据库

时间:2012-09-28 09:40:37

标签: jsf datatable

我有一个primefaces数据表。我从数据库中填充它。其中一个字段是一个由复选框表示的布尔值。我希望如果我选中或取消选中该复选框,我可以将更改保存回数据库。

我已尝试将行的当前值传递给托管bean进行保存,但复选框的新值未反映在当前行对象中。如何将更改导入当前行对象,以便将更改成功保存到数据库?

以下是我现在正在做的事情......我试图提供所需要的东西。如果信息太多或太少,请告诉我。感谢。

@ManagedBean(name = "itemManagerBean")
@ViewScoped
public class ItemManagerBean implements Serializable {
...
    public ArrayList<Item> getAllItemsForUser() {
        List list = ecf.findByPartyId(user.getPartyId());
        ArrayList<Item> itemList = new ArrayList<>(list);
        return (itemList);
    }
...
    public String saveItem(Item item){
        System.out.println(item.toString());
        ecf.updateRecord(item);
        return (null);
    }
}

//item class 
public class Item {
    private BigInteger itemId;
    private String name;
    priave boolean saleable;   //database column is not null

    //getters and setters
}


//facelet
<h:form>
<p:dataTable id="id_itemList"
             var="item" 
             value="#{itemManagerBean.allItemsForUser}" > 

    <p:column headerText="ID">  
        <h:outputText value="#{item.itemId}" />  
    </p:column>  

    <p:column headerText="Name">  
        <h:outputText value="#{item.name}" />  
    </p:column>  

    <p:column headerText="Saleable" >  
        <p:selectBooleanCheckbox value="#{item.saleable}" />
    </p:column>  

    <p:column  width="15" > 
        <p:commandButton id="id_saveRowButton" icon="ui-icon-disk" 
             title="Save" action="#{itemManagerBean.saveItem(item)}"/>  
    </p:column>  
</p:dataTable>
</h:form>

1 个答案:

答案 0 :(得分:1)

您需要在selectedItem中创建ItemManagerBean媒体资源,并在用户点击commandButton时更新其值:

在ItemManagerBean中

private Item selectedItem;
// getter and setter

在xhtml页面

<p:column  width="15" > 
    <p:commandButton id="id_saveRowButton" icon="ui-icon-disk" 
         title="Save" action="#{itemManagerBean.saveItem}">
        <f:setPropertyActionListener value="#{item}" target="#{itemManagerBean.selectedItem}" /> 
    </p:commandButton> 
</p:column> 

(请注意,您无需通过item通过saveItem方法。修改托管bean中的saveItem,以使其与selectedItem一起使用而非接受输入项目。)

链接:

example in the PrimeFaces showcase

Passing parameter to JSF action

BalusC blog