2016-09-30 57 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獲取語言並將其發送到您的服務。