gpt4 book ai didi

jsf - UISelectOne 和 UISelectMany 组件如何在 f :selectItems 中预选默认值

转载 作者:行者123 更新时间:2023-12-05 01:00:10 25 4
gpt4 key购买 nike

我知道如何预选 <p:selectOneMenu> , 在选定 value应该是来自 <f:selectItems> 的对象之一,但是这个组件在底层是如何工作的,我可以改变这种行为吗?

在我的例子中,我有一个重复的对象,实际上这是两个具有相同值但创建两次并在 <p:selectOneMenu> 中选择的对象的对象。不同于 <f:selectItems> 的对象它不认识它。
我很可能会改变我的设计,所以它会指向同一个对象,但如果由于遗留代码或其他原因我不能这样做,我该如何改变 <p:selectOneMenu> 的行为它将通过 id 比较对象例如?

我以为converter对此负责,但是当它呈现时它不会进入 getAsObject仅方法 getAsString ,所以我想有一些不同的东西,但是什么?

谢谢

最佳答案

它使用 Object#equals() 为了那个原因。您可以通过在您的实体上相应地实现它来更改(修复)此行为。

private Long id;

@Override
public boolean equals(Object other) {
return (other != null && getClass() == other.getClass() && id != null)
? id.equals(getClass().cast(other).id)
: (other == this);
}
不要忘记 hashCode() 满足 equals-hashCode contract .
@Override
public int hashCode() {
return (id != null)
? (getClass().hashCode() + id.hashCode())
: super.hashCode();
}
如果由于某些不清楚的原因无法更改现有实体,请将其包装在您自己的 DTO 中。
转换器仅在实体与其唯一的 String 之间进行转换在 HTML 输出和 HTTP 请求参数中使用的表示,因此对预选没有影响。它只对电位有影响 Validation Error: Value is not valid麻烦。
也可以看看:
  • How to populate options of h:selectOneMenu from database?
  • 关于jsf - UISelectOne 和 UISelectMany 组件如何在 f :selectItems 中预选默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29944249/

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