gpt4 book ai didi

java - JSF2 : selectOneMenu with custom selectItems: all items are selected

转载 作者:行者123 更新时间:2023-11-30 06:37:04 24 4
gpt4 key购买 nike

多亏了这里的一些很棒的文章,我才能够构建一个 <h:selectOneMenu />使用包含对象的 selectItems。在提供自定义 FacesConverter 并修复缺少的 equals()/hashcode() 方法后,我能够使用它来更改支持 bean 的属性并将其写入数据库。

唯一奇怪的是所有 HTML <option /> <select /> 的元素-元素是checked="checked" !换句话说:<h:selectOneMenu />不反射(reflect)绑定(bind)属性的当前值!

详细信息:

商店.java

@Entity
public class Store {
private Long id;
private String name;

@ManyToOne
private Category category;

// getters, setters, equals, hashcode
}

分类.java

@Entity
public class Category {
private Long id;
private String name;

// getters, setters, equals, hashcode
}

editStore.xhtml

<h:form>
....
<h:selectOneMenu value="#{backingBean.store.category}" id="category">
<f:selectItems value="#{backingBean.categorySelectItems}" />
</h:selectOneMenu>
....
</h:form>

BackingBean.java

public class BackingBean {
private Store store;

// inject data-access-facades via @EJB
// Constructor
// getters, setters

public List<SelectItem> getCategorySelectItems
List<SelectItem> items = new ArrayList<SelectItem>();
for (Category cat : categoryFacade.findAll() ) {
items.add(new SelectItem(cat, cat.getName()));
}
return items;
}

// action methods
}

我没有列出类别转换器(它在对象及其 ID 之间进行转换)。

这创建的 HTML 是:

<select id="category" name="category" size="1">
<option value="251" selected="selected">Kosmetik</option>
<option value="222" selected="selected">Sportwaren</option>
</select>

显然,store.category只能包含一个项...为什么两个选项元素都被“选中”?无论将什么类别分配给商店,HTML 总是“选择”所有选项元素。

JSF现在怎么样了,哪个SelectItem应该选择?

最佳答案

几乎可以肯定问题出在 equals(..) 方法中,该方法为所有比较的对象返回 true。对此进行测试,并让您的 IDE 生成方法(与 hashCode() 一起)

关于java - JSF2 : selectOneMenu with custom selectItems: all items are selected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3989316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com