Just out of curiosity, wouldn't it be possible to do that traversal upwards (from formComponent to Form) ?
yes, component class has visitParents methos And I suppose the <wicket:message> tags get converted somehow to these MessageContainers yep, wicket has an component resolver that do it based on the tag On Wed, Nov 25, 2009 at 2:29 PM, Xavier López <xavil...@gmail.com> wrote: > Thanks anyway Pedro, it's a good insight, and pretty original ;-) Didn't > think of it, nor knew about visitors... > > Sadly, I'm on Wicket 1.3.5 and it wouldn't be working anyway, as > MarkupContainer does not seem to provide ' > getDefaultModelObjectAsString', apart from what you said about > MessageContainer... > > Just out of curiosity, wouldn't it be possible to do that traversal upwards > (from formComponent to Form) ? > And I suppose the <wicket:message> tags get converted somehow to these > MessageContainers (which are tried to localize in the visitor by means of > "_message_" in its id) > > Thanks, > Xavier > > > 2009/11/25 Pedro Santos <pedros...@gmail.com> > > > ops, I just see: if you have an form with more than one form componente, > > that behavior will not work. So, it was just an idea :) > > > > On Wed, Nov 25, 2009 at 2:13 PM, Pedro Santos <pedros...@gmail.com> > wrote: > > > > > Possible alternative that will work on current wicket version, since > > > MessageContainer is an private inner class > > > > > > public class AdjustLabel extends AbstractBehavior > > > { > > > @Override > > > public void beforeRender(Component component) > > > { > > > if (component instanceof FormComponent) > > > { > > > final FormComponent formComponent = > > > (FormComponent)component; > > > > > component.getParent().visitChildren(MarkupContainer.class, > > > new IVisitor<MarkupContainer>() > > > { > > > > > > public Object component(MarkupContainer > > > component) > > > { > > > if > > > (component.getId().startsWith("_message_")) > > > { > > > formComponent.setLabel(new > > > ResourceModel(component > > > > > > .getDefaultModelObjectAsString())); > > > return IVisitor.STOP_TRAVERSAL; > > > } > > > else > > > { > > > return null; > > > } > > > } > > > }); > > > } > > > } > > > } > > > > > > then you set: > > > > > > input.add(new AdjustLabel()); > > > > > > > > > On Wed, Nov 25, 2009 at 1:51 PM, Xavier López <xavil...@gmail.com> > > wrote: > > > > > >> I forgot, > > >> > > >> A possible solution would be using a shared StringResourceModel for > both > > >> the > > >> setLabel() method and providing the <label> tag like this: > > >> > > >> <label wicket:id="labelX"><span wicket:id="labelXText"></span></label> > > >> > > >> StringResourceModel m = new StringResourceModel("form.x.label", this, > > >> null); > > >> x.setLabel(m); > > >> FormComponentLabel labelX = new FormComponentLabel("labelX", x); > > >> form.add(labelX); > > >> Label labelXText = new Label("labelXText", m); > > >> > > >> But I'm looking for a less intrusive solution on pages already > > >> developed... > > >> > > >> Thanks, > > >> Xavier > > >> > > >> ---------- Forwarded message ---------- > > >> From: Xavier López <xavil...@gmail.com> > > >> Date: 2009/11/25 > > >> Subject: Component.setLabel and <label> tags > > >> To: users@wicket.apache.org > > >> > > >> > > >> Hi, > > >> > > >> In a form, I have multiple fields each one with its corresponding > > >> FormComponentLabel, with proper <wicket:message> content in the markup > > >> file. > > >> Now, I'm facing the fact that I need to provide the same keys I > provided > > >> in > > >> <wicket:message> in a StringResourceModel in component's setLabel() > > >> method. > > >> > > >> Although I'm aware it's not straightforward (setLabel requires a > Model, > > >> and > > >> <label>'s body is just body markup), it would be great if there was > some > > >> way > > >> to avoid this duplication telling Wicket to use the same key provided > in > > >> the > > >> FormComponentLabel's body... > > >> > > >> Does anyone have a hint ? > > >> > > >> Thanks, > > >> Xavier > > >> > > >> > > >> > > >> > > >> -- > > >> "Klein bottle for rent--inquire within." > > >> > > > > > > > > > > > > -- > > > Pedro Henrique Oliveira dos Santos > > > > > > > > > > > -- > > Pedro Henrique Oliveira dos Santos > > > > > > -- > "Klein bottle for rent--inquire within." > -- Pedro Henrique Oliveira dos Santos