【问题标题】:Jsf form for many to many relationship多对多关系的jsf形式
【发布时间】:2016-09-30 04:20:49
【问题描述】:

我有这两个具有多对多关系的实体。

@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);
    }

【问题讨论】:

  • 但是你在 stammdatenController.create() 有什么?关于“这里应该有什么??”您只是将其设置为托管 bean 的属性?你能告诉我们你的支持 bean 和控制器吗?
  • 请查看更新。我不知道在这里做什么“这里应该有什么??”。因为我不知道如何通过表单在连接表中插入一行
  • 我认为您的问题与 JPA 相关,而不是 JSF .. 这里应该是什么?应该是 stammdatenController。我猜是语言服务。但是 save 方法中的 stammdaten 是什么?

标签: hibernate jsf


【解决方案1】:

您的选择菜单使用language.id 作为项目值。 假设这是您数据库中的int。所以你需要private selectedLanguageId(并创建getter和setter),然后使用#{selectedLanguageId}而不是你的#{what should be here}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多