<h:selectOneMenu>
是否需要转换器?或<p:selectOneMenu>
以任意用户创建的类作为其值?我的意思是,下面的代码应该在没有转换器的情况下工作吗?
<p:selectOneMenu value="#{bean.language}">
<f:selectItems value="#{bean.allLanguages}" />
</p:selectOneMenu>
和
@Named(value = "bean")
@ConversationScoped
public class Bean {
private Language language; // appropriate getter and setter are present
public List<SelectItem> getAllLanguages() {
// populates a list of select items with Strings as item labels and Languages as item values
}
}
我有一个类似的代码,带有 enum
作为类型(语言)并且它工作得很好。但是当我用普通的 java 类替换该类型时,出现转换错误。
最佳答案
这里需要一个转换器,因为 JSF 默认采用字符串,这就是您编码的方式。 JSF 不知道如何将伪实体转换为字符串,反之亦然。
一些注意事项:
1.您的 getAsString
方法定义实体/POJO 的标识符,而不是 JSF(或其他)选择作为 itemLabel 获取的标识符。
2.您的转换器可以使用这篇臭名昭著的文章深入数据库中寻找真实的实体:
您还可以将 CDI 注释与该“模式”一起使用。
3.您的 value = "bean"
是多余的,选择的 CDI 范围通常是 @ViewScoped
。但是,您必须记住,如果不使用 Seam 3 或 Apache MyFaces CODI,CDI @Named
+ JSF @ViewScoped
就无法协同工作。
关于jsf-2 - selectOneMenu 具有复杂的对象,是否需要转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14892680/