Jsf 选择从数据库中预选的项目转换器Omnifaces

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

我有一个问题:当我将对象保存到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 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;
}