Jsf 如何在selectOneMenu中绑定选定值

Jsf 如何在selectOneMenu中绑定选定值,jsf,Jsf,在SelectOne菜单中的五个选项中,我选择了第二个选项并保留了实体。 在编辑持久化实体时,SelectOne菜单始终将最后一个选项作为其值 比如说, <h:selectOneMenu value="#{userHome.user.leader}"> <f:selectItems value="#{userHome.availableLeaders}" var="leader" itemLabel="# {leader.name}" itemValue=

在SelectOne菜单中的五个选项中,我选择了第二个选项并保留了实体。 在编辑持久化实体时,SelectOne菜单始终将最后一个选项作为其值

比如说,

<h:selectOneMenu value="#{userHome.user.leader}">
    <f:selectItems value="#{userHome.availableLeaders}" var="leader" itemLabel="#        {leader.name}" itemValue="#{leader}"/>
</h:selectOneMenu>
在User.java中

public boolean equals(Object other) {
    if (this.getClass().isInstance(other)) {
        return true;
    } else {
        return false;
    }
}

public int hashCode() {
    HashCodeBuilder builder = new HashCodeBuilder();
    builder.append(getId());
    builder.append(getName());
    return builder.toHashCode();
}
看这里:

public boolean equals(Object other) {
    if (this.getClass().isInstance(other)) {
        return true;
    } else {
        return false;
    }
}
你的
equals()
方法肯定是坏的。这将为每个
其他
用户
对象返回
true
,即使该对象内部拥有完全不同的用户ID/名称。因此,所选项目与每个可用的选择项目值相匹配。这就是为什么每次都会看到最后一项被预选的原因

假设
id
属性对于每个用户都是唯一的,那么
equals()
方法最简单的形式应该如下所示:

public boolean equals(Object other) {
    if (!(other instanceof User)) {
        return false;
    }

    if (other == this) {
        return true;
    }

    if (id != null) {
        return id.equals(((User) other).id);
    }

    return false;
}
这也可以概括如下

public boolean equals(Object other) {
    return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
}
提示:像Eclipse这样有点像样的IDE可以自动生成
equals()
(和
hashCode()
)方法

另见:
看这里:

public boolean equals(Object other) {
    if (this.getClass().isInstance(other)) {
        return true;
    } else {
        return false;
    }
}
你的
equals()
方法肯定是坏的。这将为每个
其他
用户
对象返回
true
,即使该对象内部拥有完全不同的用户ID/名称。因此,所选项目与每个可用的选择项目值相匹配。这就是为什么每次都会看到最后一项被预选的原因

假设
id
属性对于每个用户都是唯一的,那么
equals()
方法最简单的形式应该如下所示:

public boolean equals(Object other) {
    if (!(other instanceof User)) {
        return false;
    }

    if (other == this) {
        return true;
    }

    if (id != null) {
        return id.equals(((User) other).id);
    }

    return false;
}
这也可以概括如下

public boolean equals(Object other) {
    return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
}
提示:像Eclipse这样有点像样的IDE可以自动生成
equals()
(和
hashCode()
)方法

另见:

缺失的equals方法也可能会出现类似的症状(例如错误选择的项目)@dvtoever:缺失的equals方法也可能出现类似的症状(例如错误选择的项目)@dvtoever: