Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-5538

When using Component.setDefaultModel, only detach the previous model if the new one is different

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • None
    • 7.0.0-M1, 6.15.0
    • wicket
    • None

    Description

      From my post on the list:

      Hi,

      I don't see the point of detaching the prevModel if the model is not changing.

      I was thinking about changing the logic of Component.setDefaultModel like that:
      public Component setDefaultModel(final IModel<?> model)
      {
      IModel<?> prevModel = getModelImpl();

      IModel<?> wrappedModel = prevModel;
      if (prevModel instanceof IWrapModel)

      Unknown macro: { wrappedModel = ((IWrapModel<?>)prevModel).getWrappedModel(); }

      // Change model
      if (wrappedModel != model)
      {
      // Detach current model only if we really change the model
      if (prevModel != null)

      Unknown macro: { prevModel.detach(); }

      modelChanging();
      setModelImpl(wrap(model));
      modelChanged();
      }

      return this;
      }

      Note that it's something that hurts us a lot in a particular pattern
      we have here. We change the default model in onConfigure and every
      time we do it it's detached even if it's the exact same model.

      We could add a check in our code but I'm thinking it could be better
      to do it in Wicket directly.

      Thoughts?

      Attachments

        1. WICKET-5538.diff
          0.9 kB
          Guillaume Smet

        Activity

          People

            mgrigorov Martin Tzvetanov Grigorov
            gsmet Guillaume Smet
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: