I have a component containing a form with many TextFields. The way it should work is that when changed, the value should be persisted immediately (no Save button, all through AJAX).
The AJAX calls work fine, the value gets to the model.
The code to save the model (and the entity contained) is in the parent component. I thought I would override onModelChanged() to propagate the changes from the components to the parent. But onModelChanged() is not called.
Parent has its own model as class member field. The subcomponents use this:
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();
}
};
...
}
How should it be done? Should I pass the onModelChanged() at all? Or does wicket have some way to notify the other model of changes?
Related - is CompoundPropertyModel only for forms, or can I use it with any component? I could use it here - prop
is the same as id.
Solved. The problem was that I had a Validator which always failed, and onModelChanged()
is called after the validation passes. And the validation error message didn't get to FeedbackPanel since it didn't get added to AjaxRequestTarget
...
After all this is done, osdamv's answer also applies. I wrote a blog post about that. https://community.jboss.org/people/ozizka/blog/2013/01/21/wicket-creating-ajax-enabled-entity-based-pages