对带有转换器的对象的selectonemenu jsf [英] selectonemenu jsf on objects with converter
问题描述
这是我的SelectOneMenu
Here is my SelectOneMenu
<h:selectOneMenu value="#{bean.myObject}" >
<f:ajax render="componentToRender" listener="#{bean.onSelect}"/>
<f:converter converterId="myObjectConverter" />
<f:selectItem itemLabel="None" itemValue="#{null}" />
<f:selectItems value="#{bean.objects}" var="object" itemValue="#{object}" itemLabel="#{object.name}" />
</h:selectOneMenu>
还有我的转换器
@FacesConverter("myObjectConverter")
public class MyObjectConverter implements Converter{
private List<MyObject> objects;
public MyObjectConverter(){
this.objects = MyController.getAllMyObjects();
}
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if(!StringUtils.isInteger(value)) {
return null;
}
return this.getMyObject(value);
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
if(value == null) {
return null;
}
return String.valueOf(((MyObject) value).getId()).toString();
}
public MyObject getMyObject(String id) {
Iterator<MyObject > iterator = this.objects.iterator();
while(iterator.hasNext()) {
MyObject object = iterator.next();
if(object.getId() == Integer.valueOf(id).intValue()) {
return object;
}
}
return null;
}
}
问题在于我的Ajax监听器从未被调用,而我的组件也从未被呈现. 我的转换器或selectOneMenu出问题了吗?我举了一个例子,但我无法弄清楚错误.
The problem is that my ajax listener is never called and my component never rendered. Is there something wrong with my converter or selectOneMenu? I follow an example and I can't figure the mistake out.
顺便说一句:我在bean中的简单方法
BTW : my simple method in the bean
public void onSelect() {
System.out.println(this.myObject);
if(this.myObject != null) {
System.out.println(this.myObject.getName());
}
}
我已经遇到了这样的问题,我将选择的值从object更改为id.但是在这里,我想使其与对象一起使用,因为我知道这是可能的.
I already had a problem like this and I changed my selected value from object to id. But here I want to make it work with objects because I know it's possible.
谢谢
推荐答案
我有解决方法.我必须重写MyObject类中的等于"方法!
I have the solution. I had to override the "equals" method in MyObject class!
谢谢.
代码
@Override
public boolean equals(Object obj) {
if(this.id == ((MyObject) obj).id) {
return true;
}else {
return false;
}
}
这篇关于对带有转换器的对象的selectonemenu jsf的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!