【问题标题】:JSF Cannot save change to datatable row to the databaseJSF 无法将数据表行的更改保存到数据库
【发布时间】:2012-09-28 09:40:36
【问题描述】:

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

【问题讨论】:

    标签: jsf datatable


    【解决方案1】:

    您需要在ItemManagerBean 中创建一个selectedItem 属性,并在用户点击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> 
    

    (请注意,您不需要通过saveItem 方法传递item。修改托管bean 中的saveItem 以使其与selectedItem 一起工作,而不是接受输入项)。

    链接:

    example in the PrimeFaces showcase

    Passing parameter to JSF action

    BalusC blog

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多