selectonemenu jsf对象与转换器

Lor*_*ic- 5 jsf converter selectonemenu

这是我的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>
Run Code Online (Sandbox Code Playgroud)

而我的转换器

@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;
    }

}
Run Code Online (Sandbox Code Playgroud)

问题是我的ajax监听器永远不会被调用,我的组件永远不会被渲染.我的转换器或selectOneMenu有什么问题吗?我举了一个例子,我无法弄清楚错误.

BTW:我在bean中的简单方法

public void onSelect() {
    System.out.println(this.myObject);
    if(this.myObject != null) {
        System.out.println(this.myObject.getName());
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经有这样的问题,我将我选择的值从object更改为id.但在这里我想让它与对象一起工作,因为我知道它是可能的.

谢谢

Lor*_*ic- 8

我有解决方案.我必须覆盖MyObject类中的"equals"方法!

谢谢.

编辑:代码

@Override
public boolean equals(Object obj) {
    if(this.id == ((MyObject) obj).id) {
        return true;
    }else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)