JSF / PrimeFaces使用selectOneMenu

时间:2015-09-01 16:19:49

标签: jsf

在JSF应用程序中,我有一个包含3000个活动的列表(JPA实体活动)。最终用户需要将这些活动关联在称为作业的组中(JPA实体作业)。多个用户可以声明某项活动。

我正在尝试在数据表列表中使用p:selectOneMenu,以使登录用户能够将活动标记到其JobId。

enter image description here

如果琼斯已登录,则第一项活动的Tag Your Job列中的选择菜单将设置为205。如果史密斯登录了选择并且他们在Tag Your Job列中选择了426(菜单将仅列出史密斯的工作ID),则会将其添加到Associated Jobs列的列表中。

我不知道如何连线。这是我的xhtml和实体。

<p:dataTable id="dataTable" var="activity" 
    selection="#{activityAssociator.activitiesToAssociate}" rowKey="#{activity.an}" 
    value="#{activityAssociator.listOfActiveArtemisActivities}" filteredValue="#{activityAssociator.filteredActivities}">

<p:column headerText="Tag Your Job">
   <p:selectOneMenu value="#{activityAssociator.selectedJob}" converter="omnifaces.SelectItemsConverter" valueChangeListener="#{activityAssociator.listenTest1}">
    <f:selectItem itemLabel="Select One" itemValue="#{null}" noSelectionOption="true" />
    <f:selectItems value="#{activityAssociator.myAvailableJobs}" var="job" itemValue="job" itemLabel="#{job.jobId}" />
<p:ajax update="@form" listener="#{activityAssociator.listenTest2}" />
</p:selectOneMenu>

活动实体

@ManyToMany(mappedBy = "artemisActivities")
private Collection<SupervisorJob> supervisorJobs;

工作实体

@ManyToMany
@JoinTable(name = "CTC_JOB_ACTIVITES", joinColumns = @JoinColumn(name = "jobId"), inverseJoinColumns = @JoinColumn(name = "an"))
private Collection<ArtemisActivity> artemisActivities;

修改

根据BalusC在下面的评论,我在活动实体中添加了:

@Transient
private SupervisorJob myJob;
typical getter/setter

和我的支持bean中的这个方法,它是从@PostConstruct方法调用的

private void setSupervisorJob() {
    for (ArtemisActivity act : listOfActiveArtemisActivities) {
        for (SupervisorJob sj : act.getSupervisorJobs()) {
            if (sj.getJobOwner().equals(auth.getEmployee())) {
                act.setMyJob(sj);
            }
        }
    }
}

我还修改了<p:selectOneMenu并更改为value="#{activity.myJob}" 现在,数据表列表的初始显示会显示正确填充的每个selectonemenu(如果适用)。这很好。

但是当我对行的一个菜单中的某个菜单进行更改时,如何引用活动ID?我正在尝试每次仅在该活动上更改作业selectonemenu时进行JPA更新/合并。或者我应该每次都对整个3000实体集合进行JPA更新/合并。这似乎有点矫枉过正。实际上,当我在监听器事件期间在我的辅助bean中迭代时,数据表值listOfActiveArtemisActivities甚至不会根据下拉中的选择反映更改。

0 个答案:

没有答案