Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF无法将对datatable行的更改保存到数据库中_Jsf_Datatable - Fatal编程技术网

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

JSF无法将对datatable行的更改保存到数据库中,jsf,datatable,Jsf,Datatable,我有一张数据表。我从数据库中填充它。其中一个字段是由复选框表示的布尔值。我希望如果我选中或取消选中复选框,我可以将更改保存回数据库 我已经尝试将行的当前值传递给托管bean进行保存,但是复选框的新值没有反映在当前行对象中。如何将更改获取到当前行对象中,以便成功地将更改保存到数据库中 这就是我现在正在做的。。。我已经尽力提供所需要的东西。如果信息太多或太少,请告诉我。谢谢 @ManagedBean(name = "itemManagerBean") @ViewScoped public class

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

我已经尝试将行的当前值传递给托管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>
@ManagedBean(name=“itemManagerBean”)
@视域
公共类ItemManagerBean实现可序列化{
...
公共数组列表getAllItemsForUser(){
List List=ecf.findByPartyId(user.getPartyId());
ArrayList itemList=新的ArrayList(列表);
返回(项目列表);
}
...
公共字符串保存项(项){
System.out.println(item.toString());
ecf.更新记录(项目);
返回(空);
}
}
//项目类别
公共类项目{
私有BigInteger项目ID;
私有字符串名称;
priave boolean saleable;//数据库列不为null
//接球手和接球手
}
//小脸

您需要在
ItemManagerBean
中创建
selectedItem
属性,并在用户单击
命令按钮时更新其值:

在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
一起工作,而不是接受输入项)

链接: