Java 如何在JSF中正确显示存储在数据库中的类别列表

Java 如何在JSF中正确显示存储在数据库中的类别列表,java,jsf,jakarta-ee,Java,Jsf,Jakarta Ee,我正在申请注册问题。每个问题都与一个或多个类别相关,因此我需要在注册问题表单中选择它所属的类别 我正在考虑使用许多选择中的一个。。。来自JSF的用于该任务的组件。我可以检索数据库中所有类别的列表(只有9个),然后将该列表绑定到f:selectItems组件。然后,每个selectItem的itemValue必须是类别的id。我还需要第二个列表,其中包含所有类别的所选id,最后使用每个id再次对数据库进行某种查询,并将其添加到列表中……这也是在问题上设置的 我不需要一个关于如何检索列表等的解释,但

我正在申请注册问题。每个问题都与一个或多个类别相关,因此我需要在注册问题表单中选择它所属的类别

我正在考虑使用许多选择中的一个。。。来自JSF的用于该任务的组件。我可以检索数据库中所有类别的列表(只有9个),然后将该列表绑定到f:selectItems组件。然后,每个selectItem的itemValue必须是类别的id。我还需要第二个列表,其中包含所有类别的所选id,最后使用每个id再次对数据库进行某种查询,并将其添加到列表中……这也是在问题上设置的

我不需要一个关于如何检索列表等的解释,但如果这种方法是好的,我可能需要一些帮助?替代方案被广泛接受:=)

列表
作为
问题
实体的属性

@Entity
public class Question {

    @OneToMany
    private List<Category> categories;

    // ...
}
(注意:直到JSF2.2才可能在
@FacesConverter
中注入
@EJB
,这就是为什么它是
@ManagedBean
,另请参见)


您不需要复制托管bean中的选定项或其他内容。

您能提供更多关于最终实现目标的信息吗?=)@J4mes先生:是的,我现在更新了:=)我相信你的方法是目前的标准方法。除非你想实现类似Stackoverflow标签的分类系统,否则我认为它没有问题。如果你想让它看起来漂亮,试试Primeface
@ManagedBean
@RequestScoped
public class CategoryConverter implements Converter {

    @EJB
    private CategoryService categoryService;

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (!(value instanceof Category) || ((Category) value).getId() == null) {
            return null;
        }

        return String.valueOf(((Category) value).getId());
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value == null || !value.matches("\\d+")) {
            return null;
        }

        return categoryService.find(Long.valueOf(value));
    }

}