Jsf形成了多对多的关系

时间:2016-09-30 04:20:49

标签: hibernate jsf

我有这两个实体有很多关系。

@Entity
public class Stammdaten {

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Language> languages = new ArrayList<Language>();
}

@Entity
public class Language {
    @ManyToMany(mappedBy = "languages")
    private List<Stammdaten> stammdatens = new ArrayList<Stammdaten>();
}

我有一个已在语言表中保存的20种语言的列表。现在,当用户填写stammdaten表单时,用户从下拉列表中选择20种语言中的一种。然后,在提交表单时,应更新stammdaten和语言的连接表。我怎么能这样做?

目前我有这个表格

<h:form id="stammdaten">

        <h:message for="RegisterGroupPanel" style="color:red;" />

        <h:panelGrid columns="3" id="RegisterGroupPanel">

            <h:outputLabel for="firstName" value="First name : " />
            <h:inputText id="firstName" value="#{stammdatenController.stammdaten.firstName}" /> <br />

        <h:selectOneMenu value="#{what should be here??}">
            <f:selectItems value="#{languageController.list()}" var="language" itemValue="#{language.id}" itemLabel="#{language.name}" />
        </h:selectOneMenu>


        <h:commandButton action="#{stammdatenController.create()}" value="Send" />

我不明白上面的代码what should be here???

中的值应该是什么

编辑:控制器

@ManagedProperty("#{languageService}")
LanguageService languageService;

private Language language = new Language();
private List<Language> languages;


public void create(){
        stammdatenService.save(stammdaten);
        FacesContext fc = FacesContext.getCurrentInstance();
        ApplicationHelpers.setSuccessMessage("Application created successfully successfully", null);
    }

1 个答案:

答案 0 :(得分:0)

您的selectonemenu使用language.id作为itemvalue。 我们假设您的数据库中intprivate selectedLanguageId。因此,您需要#{selectedLanguageId}(并创建getter和setter),然后使用#{what should be here}代替{{1}}。

然后在您的创建操作中,您应该手动执行逻辑 - 根据选定的ID获取语言并将其发送到您的服务。