Wicket の AjaxTabbedPanel を使った時に、タブの中に配置した入力フィールドの値をフォーム送信ボタンによる受信ではなく、
タブのクリック=タブ切り替えのタイミングで受け取る方法に悩んだ。
org.apache.wicket.extensions.markup.html.tabs.TabbedPanel の継承である AjaxTabbedPanel が、AjaxFallbackLink でタブのリンクを
作っているので、これを AjaxSubmitLink での実装にするものを自分で用意する。
当然、Form コンポーネントをタブを配置する親の方で配置する必要がある。
import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.extensions.ajax.markup.html.tabs.AjaxTabbedPanel; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; /** * AjaxTabbedPanelをAjaxSubmitLinkで実装 */ public class YAjaxTabbedPanel<T extends ITab> extends AjaxTabbedPanel<T>{ public YAjaxTabbedPanel(String id, List tabs){ super(id, tabs); } public YAjaxTabbedPanel(String id, List tabs, IModel model){ super(id, tabs, model); } @Override protected WebMarkupContainer newLink(final String linkId, final int index){ return new AjaxSubmitLink(linkId){ @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form){ onBeforeChangeTab(target, index); setSelectedTab(index); if (target != null){ target.add(YAjaxTabbedPanel.this); } onAjaxUpdate(target); } }; } protected void onBeforeChangeTab(final AjaxRequestTarget target, final int index){ } }
これで幸せになれるかもしれない。