2016-09-30 53 views
0

我有这2个实体有多对多的关系。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); 
    } 
+0

但是你有什么在stammdatenController.create()?关于“这里应该是什么?”你只需将它设置为托管bean的属性?你能向我们展示你的支持bean和控制器吗? –

+0

请参阅更新。我不知道该在这里做什么“应该在这里?”。因为我不知道如何通过表格 – asdlfkjlkj

+2

在连接表中插入一行我认为你的问题与JPA有关,而不是JSF ..应该在这里?应该是stammdatenController。 languageService我猜。但是在保存方法中被戳穿了什么? –

回答

0

你,selectOneMenu使用language.id作为itemvalue。 我们假设这是int在您的数据库中。所以你需要private selectedLanguageId(并创建getter和setter),然后使用#{selectedLanguageId}而不是你的#{what should be here}

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