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