Thanks a lot for your helps, Martin. I will give it a try.

On Fri, Aug 6, 2010 at 12:14 PM, Martin Makundi <
martin.maku...@koodaripalvelut.com> wrote:

> Use a reusemanager that manages the rawinput values.
>
> public class FormComponentReuseManager implements Serializable {
>  private final Map<Object, Map<String, Component>> idMapRow = new
> HashMap<Object, Map<String, Component>>();
>
>
>  /**
>   * @param <S>
>   * @param <T>
>   * @param rowId
>   * @param componentId
>   * @param newComponent
>   * @return FormComponent
>   */
>  @SuppressWarnings("unchecked")
>  public <S, T extends FormComponent<S>> T rememberOrReuse(Object
> rowId, String componentId, T newComponent) {
>    return (T) rememberOrReuse(rowId, componentId, (Component)
> newComponent);
>  }
>
>
>  /**
>   * @param <T>
>   * @param rowId
>   * @param newComponent
>   * @return FormComponent
>   */
>  public <T extends Component> T rememberOrReuse(Object rowId, T
> newComponent) {
>    return rememberOrReuse(rowId, newComponent.getId(), newComponent);
>  }
>  /**
>   * @param <T>
>   * @param rowId
>   * @param componentId
>   * @param newComponent
>   * @return FormComponent
>   */
>  public <T extends Component> T rememberOrReuse(Object rowId, String
> componentId, T newComponent) {
>    Map<String, Component> rowMap = createOrReuse(rowId);
>
>    @SuppressWarnings("unchecked")
>    T existingComponent = (T) rowMap.get(componentId);
>
>    if (newComponent instanceof FormComponent) {
>      // Never reuse the component itself, just reuse the
>      rowMap.put(componentId, newComponent);
>
>      if (existingComponent != null) {
>        WicketUtils.fakeRawInput((FormComponent<?>)newComponent,
> (FormComponent<?>)existingComponent);
>        // Transfer also the error messages
>        for (FeedbackMessage feedbackMessage :
> Session.get().getFeedbackMessages().messages(new
> ComponentFeedbackMessageFilter(existingComponent))) {
>          WicketUtils.replaceReporter(feedbackMessage,
> (FormComponent<?>) newComponent);
>        }
>      }
>
>      return newComponent;
>    }
>
>    // else
>    if (existingComponent == null) {
>      rowMap.put(componentId, newComponent);
>      return newComponent;
>    }
>
>    // else
>    return existingComponent;
>  }
>
>  /**
>   * @param rowId
>   * @return Map<String, FormComponent>
>   */
>  private Map<String, Component> createOrReuse(Object rowId) {
>    Map<String, Component> rowMap = idMapRow.get(rowId);
>
>    if ((rowMap == null) && (rowId instanceof AbstractDTO) &&
> (((AbstractDTO) rowId).getId() != null)) {
>      rowId = ((AbstractDTO) rowId).getId();
>      rowMap = idMapRow.get(rowId);
>    }
>
>    if (rowMap == null) {
>      rowMap = new HashMap<String, Component>();
>      idMapRow.put(rowId, rowMap);
>    }
>
>    return rowMap;
>  }
>
>  /**
>   *
>   */
>  public void clear() {
>    idMapRow.clear();
>  }
>
>  /**
>   * @param <S>
>   * @param <T>
>   * @param key
>   * @param formComponent
>   * @param behaviors
>   * @return T
>   */
>  public <S, T extends FormComponent<S>> T
> rememberOrReuseAndProvideFeedback(
>      Object key, T formComponent, IBehavior... behaviors) {
>    return rememberOrReuseAndProvideFeedback(key,
> formComponent.getId(), formComponent, behaviors);
>  }
>  /**
>   * @param <S>
>   * @param <T>
>   * @param key
>   * @param id
>   * @param formComponent
>   * @param behaviors
>   * @return T
>   */
>  public <S, T extends FormComponent<S>> T
> rememberOrReuseAndProvideFeedback(
>      Object key, String id, T formComponent, IBehavior... behaviors) {
>    formComponent.add(behaviors);
>    formComponent.setOutputMarkupId(true);
>    return rememberOrReuse(key, id, FeedbackStyler.add(formComponent));
>  }
> }
>
>
> **
> Martin
>
> 2010/8/6 Duy Do <doquoc...@gmail.com>:
> > Hi all,
> >
> > For the moment I can add/remove a form component in RepeatingView on the
> > fly, but every time I add or remove a form component, the model values of
> > previous form component are lost. How can I keep them in RepeatingView?
> >
> > Thanks,
> > Duy
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to