我正在尝试做一些我认为的最基本的场景。
在起始页面上有一个来自数据库的类别列表,在我点击类别后,应该有一个页面包含有关该类别的一些详细信息(可能打印它的名称和一些产品等)
我正在使用 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