package org.devgateway.toolkit.forms.wicket.components; import org.apache.wicket.markup.html.panel.GenericPanel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; /** * @author mpostelnicu Forced {@link CompoundPropertyModel} model over * {@link GenericPanel} to ease sub-field referencing * @see CompoundSectionPanel#onInitialize() */ public class CompoundSectionPanel<T> extends GenericPanel<T> { private static final long serialVersionUID = 1L; protected IModel<String> title; /** * @param id */ public CompoundSectionPanel(final String id) { this(id, null); } /** * @param id * @param model */ public CompoundSectionPanel(final String id, final IModel<T> model) { this(id, model, new ResourceModel(id + ".label")); } /** * @param id * @param model * @param title */ public CompoundSectionPanel(final String id, final IModel<T> model, final IModel<String> title) { super(id, model); // create a title in case we need it this.title = title; } /** * The default {@link CompoundPropertyModel}, for this {@link CompoundSectionPanel} * This can be overriden to provide for example, custom binding * @see CompoundPropertyModel#bind(String) * @return */ public IModel<T> getCompoundSectionModel() { return new CompoundPropertyModel<>(getModel()); } @Override protected void onInitialize() { super.onInitialize(); setOutputMarkupPlaceholderTag(true); setOutputMarkupId(true); // we wrap the self model into a CompoundModel to ease field referencing setModel(getCompoundSectionModel()); } }