AutoLabelTextResolver fails to pick up locale changes in the session

Details

Description

When using <wicket:label key="..."> AutoLabelTextResolver correctly picks up the localized message identified by the key. However, if the Session locale is changed, neither the printed label nor the FormComponent's label model get updated - both will still contain the initial message. This is inconsistent with the behavior of <wicket:message> and StringResourceModel. The principle of least surprise (and in my opinion, also that of highest usefulness ) suggests that AutoLabelTextResolver should dynamically get the localized string whenever it deals with something that can be localized. That includes the <wicket:label key="..."> case mentioned above, as well as when using FormComponent#getDefaultLabel.

I have only tested this in trunk 1.5 (since it recently came up during a training I gave on Wicket 1.5). I suspect it also affects 1.4.x.

To fix the issue, I changed AutoLabelTextResolver to use a StringResourceModel when picking up a localized message via the key attribute. When it's using FormComponent#getDefaultLabel it now uses a LoadableDetachableModel to reliably pick up changes here. I also refactored the "find the label content" part of AutoLabelTextResolver#onComponentTag into a separate method to increase readability.

Carl-Eric Menzel
added a comment - 01/Oct/11 15:46 This patch against trunk contains:
a test that demonstrates the wrong behavior of AutoLabelTextResolver
a fixed AutoLabelTextResolver that behaves correctly.
To fix the issue, I changed AutoLabelTextResolver to use a StringResourceModel when picking up a localized message via the key attribute. When it's using FormComponent#getDefaultLabel it now uses a LoadableDetachableModel to reliably pick up changes here. I also refactored the "find the label content" part of AutoLabelTextResolver#onComponentTag into a separate method to increase readability.