ログ日記

作業ログと日記とメモ

Wicket1.5でIComponentResolverを使ってフォームコンポーネントをadd

public boolean addForRender(Component component,
    MarkupContainer container, MarkupStream markupStream) {
  container.internalAdd(component);
  component.prepareForRender();
  try {
    if (markupStream == null) {
      component.render();
    } else {
      component.render(markupStream);
    }
  } finally {
    component.afterRender();
  }
  return true;
}
Re: FormでComponentResolverを使用したい (Wicket-ja-user 228) - Wicket-ja - OSDN

1.5になってresolveメソッドがコンポーネント自体を返すように変更されたので、ここのコードも変える必要がある。

    /**
     * フォームコンポーネントに入力値を反映ために使うメソッド。
     * @param component
     * @param container
     * @param markupStream
     * @return
     */
    private void addForRender(Component component, MarkupContainer container,
            MarkupStream markupStream){
        if (markupStream != null){
            component.setMarkup(markupStream.getMarkupFragment());
        }
        component.setParent(this);
        setAuto(true);
        add(component);
        setAuto(false);
    }

本当はadd(component)だけ書いて終わりたいのだが、addメソッドではisAutoのチェックが入るのでそのチェックをくぐり抜けるため。
こういう使い方をやっていいのかどうかは謎。