2016-09-30 1 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の言語の1つを選択します。フォームが送信されると、stammdatenとlanguageの結合表を更新する必要があります。どうやってやるの?

現在、私はこのフォーム

<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のプロパティに設定するだけです。バッキングビーンとコントローラを見せてくれますか? –

+0

アップデートをご覧ください。私はここで何をすべきかわからない "何がここにあるのだろうか?"フォームを使ってジョインテーブルに行を挿入する方法がわからないので、 – asdlfkjlkj

+2

あなたの質問はJPAではなく、JSFに関連していると思います。 stammdatenControllerにする必要があります。私はlanguageServiceと思います。しかし、どのような方法で保存方法をstammdatenですか? –

答えて

0

はあなたのselectonemenuはlanguage.idを使用していますitemvalueとして あなたのDBにはintとしましょう。したがって、private selectedLanguageIdが必要です(ゲッターとセッターを作成してください)。#{what should be here}の代わりに#{selectedLanguageId}を使用してください。

あなたの作成アクションでは、ロジックを手動で行う必要があります。選択したIDに基づいて言語を取得し、それをサービスに送信してください。