2

我有一个组件,其中包含一个带有许多 TextField 的表单。它应该工作的方式是,当更改时,应该立即保留该值(没有保存按钮,全部通过 AJAX)。

AJAX 调用工作正常,值到达模型。

保存模型(和包含的实体)的代码在父组件中。我以为我会覆盖 onModelChanged() 以将更改从组件传播到父级。但是 onModelChanged() 没有被调用。

Parent 有自己的模型作为类成员字段。子组件使用这个:

ReleaseTraitRowPanel( String id, IModel<IHasTraits> relModel, ... ) {
    ...
    PropertyModel<String> traitModel = new PropertyModel( relModel.getObject().getTraits(), prop);

    EditableLink4 link = new EditableLink4("link", traitModel){
        // Pass the change notification to upper level. TODO: Does Wicket do this automatically?
        @Override protected void onModelChanged() {
            ReleaseTraitRowPanel.this.onModelChanged();
        }
    };
    ...

}

应该怎么做?我应该通过 onModelChanged() 吗?或者检票口是否有某种方式来通知其他模型的变化?

相关 - CompoundPropertyModel 仅适用于表单,还是我可以将它与任何组件一起使用?我可以在这里使用它 -prop与 id 相同。

4

2 回答 2

1

你使用了错误的方法,你应该使用modelChanged(),如果你看他的源代码是这样的

/**
 * Called to indicate that the model content for this component has been changed
 */
public final void modelChanged()
{
    // Call user code
    internalOnModelChanged();
    onModelChanged();
}

另一方面 onModelChanged() 是

/**
 * Called anytime a model is changed after the change has occurred
 */
protected void onModelChanged()
{
}

如您所见,onModelChanged() 是对 modelChanged() 的调用。

CompoundPropertyModel 可以在任何 WebMarkUpContainer 中使用;换句话说,几乎在每个容器中

于 2013-01-22T00:07:16.537 回答
1

解决了。问题是我有一个总是失败的验证器,并且onModelChanged()在验证通过后被调用。并且验证错误消息没有到达 FeedbackPanel,因为它没有被添加到AjaxRequestTarget...

完成这一切之后,osdamv 的回答也适用。我为此写了一篇博文。 https://community.jboss.org/people/ozizka/blog/2013/01/21/wicket-creating-ajax-enabled-entity-based-pages

于 2013-01-22T02:18:17.577 回答