Jsf 保存h:dataTable中的所有行

Jsf 保存h:dataTable中的所有行,jsf,datatable,Jsf,Datatable,我有一个带有h:dataTable的Facelets页面。在h:dataTable的每一行中,我显示了用户的一些已启用和已禁用的服务。下面是模型对象 public class ServiceList { private long userId; private long serviceGroupId; private String serviceGroupName; private long serviceId; private String servi

我有一个带有
h:dataTable的Facelets页面。
h:dataTable
的每一行中,我显示了用户的一些已启用和已禁用的服务。下面是模型对象

public class ServiceList {

    private long userId;
    private long serviceGroupId;
    private String serviceGroupName;
    private long serviceId;
    private String serviceName;
    private String serviceUrl;
    private String serviceState;

    public UserServiceList() {
    }
//getters and setters....
}
这些是我在dataTable的一行中显示的详细信息。 上述模型对象中的serviceState为“Y”或“N”

我的问题是,应用程序用户应该能够一次更新dataTable所有行的servicestate,并在后端数据库中进行更新。

1) 我需要在dataTable内部使用什么额外的JSF组件来实现这一点?我正在考虑用h:selectOneradio再添加一列

2) 如何获取已选择的行以及它们已设置的状态

我是JSF的新手,请帮忙

更新:目前我在表的页脚部分有两个按钮,即“禁用服务”和“启用服务”

单击Disable Service(禁用服务)后,我将导航到另一个页面,向应用程序用户显示要禁用的已启用服务的列表

反之亦然,对于已启用的服务按钮,请单击。

因此,假设您在托管Bean中有一个希望用户编辑的服务列表:

List<Service> serviceList;
然后您可以实现一个
commandButton
,它有一个
action
或一个
actionListener
,它指向托管bean的某个方法,如下所示:

<h:commandButton action="#{yourManagedBean.saveAllAction}" ... >

而拯救他们的相应方法非常简单。您迭代托管bean字段
serviceList
并持久化每个条目(不管您如何持久化它们,就像在使用Hibernate或其间的任何DAO类时调用
EntityManager
一样,您可以命名它。)

关于服务状态:我最好使用
selectBooleanCheckbox
来切换状态,因为它可能是一个布尔值

在评论1后编辑:


您的
服务
类中有
服务状态
。目前它是一个字符串,但我认为它应该是布尔值来切换活动/非活动。如果通过
selectBooleanCheckbox
显示此属性,则它会在相应的Java类中自动更改。因此调用
getServiceStatus()
将返回
true
false
,具体取决于前端中选择的内容。如果您保留整个
服务
对象,那么您不必做任何事情,因为在前端HTML元素中所做的任何修改都会自动投影到它后面的Java对象。

感谢Sebastian的回答。您能更清楚地存储更改的行id吗?是的,我更新了我的问题。这应该会有所帮助。否则,我建议阅读一些关于Java/JSF如何在这个方向上工作的资料。您拥有如何执行此操作的基本结构—保存服务取决于您的环境,因此,我只能笼统地解释。再次感谢Sebastian。我解决了存储此链接中选定行的问题。我使用selectoneRadio显示用户,并提供了禁用或启用选项。正如您所说,我将其链接到服务类中的serviceStatus。这就解决了我的问题。现在我可以得到选择的行和用户选择的状态。谢谢你的帮助。
<h:commandButton action="#{yourManagedBean.saveAllAction}" ... >