jsf - selectonemenu jsf 在带有转换器的对象上

标签 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>

还有我的转换器
@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 有问题吗?我按照一个例子,我无法弄清楚错误。

顺便说一句:我在 bean 中的简单方法
public void onSelect() {
    System.out.println(this.myObject);
    if(this.myObject != null) {
        System.out.println(this.myObject.getName());
    }
}

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

谢谢

最佳答案

我有解决方案。我不得不重写 MyObject 类中的“equals”方法!

谢谢。

编辑:代码

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

关于jsf - selectonemenu jsf 在带有转换器的对象上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17748706/

相关文章:

jquery - 获取未定义的选定值

jsf - 如何在 p :selectOneMenu 的选定项目上显示图像

ajax - JSF:将 AJAX 推送与 ICEfaces (ICEpush) 结合使用

java - 丰富的日历日期格式

wpf - 根据 bool 值更改边框颜色

string - 将字符视为变量

java - 使用ajax刷新验证码的问题

unit-testing - 如何测试使用 session 参数的 JSF bean 方法?

android - Retrofit-2.0 - 解析在 xml 中包含 json 的响应

jsf-2 - selectOneMenu 具有复杂的对象,是否需要转换器?