将查询字符串参数转换为实体

时间:2015-03-10 19:41:09

标签: jsf entity converter viewparams

我试图做一些我认为最基本的情景。

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

我试图做BalusC did on ther blog post

我使用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}" />不打印任何内容(可能为null)。 我如何在category.xhtml页面中拥有类别实体?

-

为了说清楚,我让它与像

这样的想法一起工作
<h:commandButton action="#{categoryController.showCategory(category)}" />

但这会生成http post,我想要简单的get请求。对我而言,只能通过post访问它才是荒谬的。

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

0 个答案:

没有答案