Java 无法转换客户端值';空';返回到服务器端对象

Java 无法转换客户端值';空';返回到服务器端对象,java,tapestry,Java,Tapestry,这个问题是关于Tapestry组件的问题 我正在寻找一个解决这个问题的解决方案,而不是任何解决方法或替代方法,即如何实现这个接口 考虑Tapestry表单上的ajaxformloop元素: … getItems()类内方法返回持久化对象和尚未持久化的新添加项(其中包含nullid)的合成组合(Listinterface) 提交表单时,我收到以下错误: 无法将客户端值“null”转换回服务器端对象 此错误发生在SuccessFromSave()方法(save是提交链接的id)之前 我想知道,如

这个问题是关于
Tapestry
组件的问题

我正在寻找一个解决这个问题的解决方案,而不是任何解决方法或替代方法,即如何实现这个接口

  • 考虑
    Tapestry
    表单上的
    ajaxformloop
    元素:

  • getItems()
    类内方法返回持久化对象和尚未持久化的新添加项(其中包含
    null
    id)的合成组合(
    List
    interface)

  • 提交表单时,我收到以下错误:

    无法将客户端值“null”转换回服务器端对象

  • 此错误发生在SuccessFromSave()方法(
    save
    是提交链接的id)之前

    我想知道,如何使用
    ajaxformloop
    管理这些未持久化的对象以防止此类错误。实际上,我想在我的
    onSucceCFrom…()
    方法中保存这些项(以DB为单位)


    我错过了什么?

    实际上,我错过了我的
    ajaxformloop
    容器的自定义
    ValueEncoder
    。此组件的默认编码器产生的上述错误

    自定义编码器的设置方式如下:

    其中
    itemcoder
    是java类中的
    @Property
    注释字段:

    @Property
    private ValueEncoder<MyItem> itemEncoder = new ValueEncoder<MyItem>() {
        @Override
        public String toClient(MyItem value) {
            return value.id != null ? value.id.toString() : "";
        }
    
        @Override
        public MyItem toValue(String clientValue) {
            if (clientValue != null && !clientValue.isEmpty()) {
                Long id = Long.parseLong(clientValue);
                return (MyItem) session.get(MyItem.class, id);
            }
            return new MyItem();
        }
    };
    
    @属性
    私有ValueEncoder itemEncoder=新的ValueEncoder(){
    @凌驾
    客户端的公共字符串(MyItem值){
    返回value.id!=null?value.id.toString():“”;
    }
    @凌驾
    公共MyItem toValue(字符串clientValue){
    if(clientValue!=null&&!clientValue.isEmpty()){
    Long id=Long.parseLong(clientValue);
    return(MyItem)session.get(MyItem.class,id);
    }
    返回新的MyItem();
    }
    };
    
    实际上,我错过了我的
    ajaxformloop
    容器的自定义
    ValueEncoder
    。此组件的默认编码器产生的上述错误

    自定义编码器的设置方式如下:

    其中
    itemcoder
    是java类中的
    @Property
    注释字段:

    @Property
    private ValueEncoder<MyItem> itemEncoder = new ValueEncoder<MyItem>() {
        @Override
        public String toClient(MyItem value) {
            return value.id != null ? value.id.toString() : "";
        }
    
        @Override
        public MyItem toValue(String clientValue) {
            if (clientValue != null && !clientValue.isEmpty()) {
                Long id = Long.parseLong(clientValue);
                return (MyItem) session.get(MyItem.class, id);
            }
            return new MyItem();
        }
    };
    
    @属性
    私有ValueEncoder itemEncoder=新的ValueEncoder(){
    @凌驾
    客户端的公共字符串(MyItem值){
    返回value.id!=null?value.id.toString():“”;
    }
    @凌驾
    公共MyItem toValue(字符串clientValue){
    if(clientValue!=null&&!clientValue.isEmpty()){
    Long id=Long.parseLong(clientValue);
    return(MyItem)session.get(MyItem.class,id);
    }
    返回新的MyItem();
    }
    };