java - 如何在 JSF 中正确呈现数据库中存储的类别列表

标签 java jsf jakarta-ee

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

我正在考虑使用 JSF 中的 selectMany... 组件之一来完成该任务。我可以检索数据库中所有类别的列表(仅 9 个),然后将该列表绑定(bind)到 f:selectItems 组件。那么每个selectItem的itemValue必须是category的id。我还需要第二个列表,其中包含类别的所有选定 id,最后使用每个 id 再次对数据库进行某种查询,并将其添加到列表中......这再次根据问题进行设置。

我不需要解释如何检索列表等,但如果这种方法有什么好处,我可能需要一些帮助?替代方案已被广泛接受:=)

最佳答案

制造List<Category> Question 的属性实体。

@Entity
public class Question {

    @OneToMany
    private List<Category> categories;

    // ...
}

<h:selectManyMenu value="#{question.categories}" converter="#{categoryConverter}">
    <f:selectItems value="#{data.categories}" />
</h:selectManyMenu>

您只需提供 Category 的转换器类。

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

}

(注意:在 JSF 2.2 之前,不可能在 @EJB 中注入(inject) @FacesConverter ,这就是为什么它是 @ManagedBean ,另请参阅 Communication in JSF 2.0 - Converting and validating GET request parameters )

您不需要在托管 bean 或其他内容中复制所选项目。

关于java - 如何在 JSF 中正确呈现数据库中存储的类别列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202569/

相关文章:

java - 使用 jooq dsl 插入超过 22 个字段

java - 有没有办法在ROS noetic中使用rosjava

java - JSF 如何看待客户端技术?

jsf - 在组件上切换验证器

java - 将数组php转换为java

java - 使用java在httpclient中下载文件?

JSF 转换器资源包消息

jakarta-ee - 使用 exec-maven-plugin 运行守护进程避免 `IllegalThreadStateException`

java - com.dhtmlx.connector.JSONOptionsConnector 无法转换为 com.dhtmlx.connector.OptionsConnector

eclipse - 如何在eclipse juno中添加服务器?