0

我正在尝试做一些我认为的最基本的场景。

在起始页面上有一个来自数据库的类别列表,在我点击类别后,应该有一个页面包含有关该类别的一些详细信息(可能打印它的名称和一些产品等)

我试图做BalusC 在他们的博客文章中所做的事情

我正在使用 java-ee-7、glasfish 4.1、hibernate 4.3.5

在 index.xhtml 中,我使用参数链接到类别:

<h:link outcome="category.xhtml" value="#{category.name}">
    <f:param name="categoryId" value="#{category.id}"/>
</h:link>

categoryId使用查询字符串参数可以很好地打印类别。

然后在 category.xhtml 我有:

<f:metadata>
    <f:viewParam name="categoryId" 
        value="#{categoryController.category}"
        converter="#{categoryConverter}" />
</f:metadata>

<h:body>
    Category name:

    <h:outputText value="#{categoryController.category.name}" />
    <!-- this one prints nothing -->

</h:body>

CategoryController 代码如下所示:

@Named
@RequestScoped
public class CategoryController {

    private Category category;

    public void setCategory(Category category) {
        this.category = category;
    }
    public Category getCategory() {
        return category;
    }
}

转换器看起来像这样:

@Named
@RequestScoped
public class CategoryConverter implements Converter {

    @Inject
    private CategoryRepository categoryRepository;

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String s) {
        return categoryRepository.find(Integer.parseInt(s));
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object o) {
        if (o == null || !(o instanceof Category)) {
            return null;
        }
        return ((Category) o).getId().toString();
    }
}

调用了一些仅测试getAsString方法,但我认为应该有getAsObject

语句<h:outputText value="#{categoryController.category.name}" />不打印任何内容(可能为空)。如何在category.xhtml页面中有类别实体?

--

为了清楚起见,我让它与一些想法一起工作

<h:commandButton action="#{categoryController.showCategory(category)}" />

但这会产生http post,我想要简单的get请求。对我来说,只能通过post.

如果缺少某些东西,我可以通过 github 访问它,并在此处删除不必要的代码:https ://github.com/Yavin/jsf-entity-convert

4

0 回答 0