1

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

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

  1. 考虑表单ajaxformloop上的元素Tapestry

    <tr t:type="ajaxformloop" t:id="items" source="getItems()" value="item">

    ...

    </tr>

  2. getItems()List类中的方法返回持久对象和尚未持久的新添加项(其中包含nullid )的合成组合(接口)。

  3. 提交表单时,我收到此错误:

    Unable to convert client value 'null' back into a server-side object

此错误发生 onSuccessFromSave()方法之前(save是提交链接的 ID)。

我想知道,我怎样才能管理这样的非持久对象ajaxformloop以防止这样的错误。实际上,我想在我的onSucceccFrom...()方法中保存(在数据库中)这些项目。

我在这里错过了什么?

4

1 回答 1

1

实际上我错过ValueEncoder了我的ajaxformloop容器的定制。该组件默认产生的上述错误encoder

自定义编码器应该这样设置:

<tr t:type="ajaxformloop" t:id="items" source="getItems()" value="item" encoder="itemEncoder">

itemEncoderjava类中的@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();
    }
};
于 2013-04-09T07:38:43.760 回答