UISelectOne 和 UISelectMany 组件如何在 f:selectItems 中预选默认值
How do UISelectOne and UISelectMany components preselect defaults in f:selectItems
我知道如何预选 <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()
to satisfy the 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?
我知道如何预选 <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()
to satisfy the 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?