AjaxFormLoop在提交后不会为新创建的表单元素填充值

时间:2011-12-07 00:58:00

标签: tapestry

有人可以在表单提交过程中指出代码中的/ where,ajaxformloop复制新添加的行结果 我指的是以下示例代码 - http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/formloop1

我有一个类似的代码,以下是我的ValueEncoder

@Log
public ValueEncoder<Promotion> getPromotionEncoder() {

    return new ValueEncoder<Promotion>() {

        @Log
        public String toClient(Promotion promo) {
            log.debug("toClient id="+promo.getId());
            if (promo.getId() == 0)
            {
                return NEW_PROMOTION;
            }
            return new Long(promo.getId()).toString();
        }
        @Log
        public Promotion toValue(String id) {

            log.debug("toValue id="+id);
            Promotion promotion = null;

            if (id.equals(NEW_PROMOTION))
            {
                promotion = new Promotion();
                newPromotions.add(promotion);
            }
            else 
            {
                promotion = crudService.findUniqueWithNamedQuery(Promotion.BY_ID,
                                    QueryParameters.with("id", new Long(id).longValue()).parameters());
            }
            return promotion == null? new Promotion(): promotion;
        }
    };
}

在表单提交后调用onSuccess()方法时,我无法访问上面newPromotions方法中toValue()存储在{{1}}中的新创建的行的值。

感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

您在toClient中的比较是错误的:

if (promo.getId() == 0){ return NEW_PROMOTION; }

当您实例化一个新的促销时,它的ID很可能不是零,而是NULL。 Jumpstart ValueEncoder就是这样做的:

return id == null ? NEW_PERSON : id.toString();

因此你的toValue方法也失败了:)