Jsf 选择从数据库中预选的项目转换器Omnifaces
我有一个问题:当我将对象保存到DB时,它工作正常,但当我想从DB中检索它时,它不工作。我正在使用Omnifaces 1.8.3中的Jsf 选择从数据库中预选的项目转换器Omnifaces,jsf,omnifaces,Jsf,Omnifaces,我有一个问题:当我将对象保存到DB时,它工作正常,但当我想从DB中检索它时,它不工作。我正在使用Omnifaces 1.8.3中的selectItemsConverter(我也尝试过使用1.10) email.java @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; ... @ManyToOne(fetch = FetchType.EAGER) private ModeloEmail model
selectItemsConverter
(我也尝试过使用1.10)
email.java
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
@ManyToOne(fetch = FetchType.EAGER)
private ModeloEmail modeloEmail;
...
@Override
public int hashCode() {
int hash = 7;
hash = 31 * hash + Objects.hashCode(this.id);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final AutomacaoEmail other = (AutomacaoEmail) obj;
if (!Objects.equals(this.id, other.id)) {
return false;
}
return true;
}
@Override
public String toString() {
return String.format("%s[id=%d]", getClass().getSimpleName(), getId());
}
loadFromDatabaseMethod()
List modelosTemp=modeloEmailFacade.buscarTodos();
SelectItemsBuilder SelectItemsBuilder=新建SelectItemsBuilder();
如果(modelosTemp!=null){
for(ModeloEmail ModeloEmail:modelosTemp){
选择ItemsBuilder.add(modeloEmail,modeloEmail.getNome());
}
modelosEmails=selectItemsBuilder.buildList();
}
page.xhtml
<p:selectOneMenu value="#{automacaoEmailsController.automacaoEmail.modeloEmail}" converter="omnifaces.SelectItemsConverter">
<f:selectItem noSelectionOption="true" itemLabel="Selecionar um modelo"/>
<f:selectItems value="#{automacaoEmailsController.modelosEmails}"/>
</p:selectOneMenu>
我也尝试了SelectItemsIndexConverter
if (getClass() != obj.getClass()) {
return false;
}
当obj
是JPA实现特定的代理类时,您的equals()
方法中的此测试可能会失败,例如Hibernate用于惰性实体。这至少可以解释为什么它“有时”起作用
如果您确实在使用Hibernate,那么您需要将上面的测试替换为下面的测试:
if (Hibernate.getClass(this) != Hibernate.getClass(obj)) {
return false;
}
或者通过以下更通用(不依赖休眠)的测试:
我用的是eclipselink。就我而言,它从来都不起作用。它与建议的修改不起作用。那么,在目前提供的信息中,问题是不可见的。哪个服务器?哪个PF版本?如果将
noSelectionOption=“true”
替换为itemValue=“#{null}”
,会怎么样?如果将
替换为
,该怎么办?我正在使用:-Glassfish server 4.x-PF 4.0.21我已删除此行:
不工作。我改为
。。没用。我尝试了:List
,List
,SelectItem[]
。不起作用。没有错误发生。我在“选择”旁边放了一个inputText,值显示正确。我创建了一个重新充电的方法并更新了表单,但不起作用。我在数据库中重新创建了表,还创建了一个只包含有问题的组件的空白页。不起作用。听起来好像也会失败。您能否检查生成的HTML输出中的
是否正常?抱歉@balusc。我的错误。我为父类实现了方法“equals”,并创建了selectOneMeu
指向此类的相关对象。实体关系未实现equals
方法。我很抱歉。现在它就像一个符咒。
if (Hibernate.getClass(this) != Hibernate.getClass(obj)) {
return false;
}
if (!(obj.getClass().isAssignableFrom(getClass()) && getClass().isAssignableFrom(obj.getClass()))) {
return false;
}