yes, that is a bug

Juergen

On 11/8/05, Ingram Chen <[EMAIL PROTECTED]> wrote:
> I check out latest CVS HEAD, but find strange behavior:
>
> If a MyPage.properties as below:
>
> RequiredValidator = ${label} is required
> myForm.bookId = Book ID
>
> then validation message work well and is "Book ID is required"
>
> However, if I move above messages into global MyWebApplication.properties,
> the message I got become: "bookId is required", which use componentId
> instead of defined label: "myForm.bookId".
>
> Is this a bug ?
>
>
> On 11/8/05, Juergen Donnerstag <[EMAIL PROTECTED]> wrote:
> >
> > It works on my side. I created unit tests and I think they are ok. I
> > enabled logging for the package and it doesn't happen. I tested the
> > formInput example and it works without changes. Did you update
> > AbstractValidator as well?
> >
> > Juergen
> >
> > On 11/7/05, Sven Meier <[EMAIL PROTECTED]> wrote:
> > > Hello Juergen,
> > >
> > > maybe it shouldn't - but currently it does ;).
> > >
> > > I debugged the new algorithm of ComponentStringResourceLoader today. As
> > > I already suspected, the id of the validated component is duplicated in
> > > the prefixKey, since both
> DefaultValidatorResourceKeyFactory and
> > >
> > > ComponentStringResourceLoader are now prepending the same id.
> > >
> > > Example:
> > >   APage
> > >   -> XPanel "x"
> > >     -> RequiredTextField "y"
> > > Now the string resources will be searched in the following order:
> > >   APage.properties:
> > >     x.y.y.RequiredValidator
> > >     y.RequiredValidator
> > >   XPanel.properties
> > >     y.y.RequiredValidator
> > >     y.RequiredValidator
> > >
> > > Obviously "x.y.y.RequiredValidator" and "y.y.RequiredValidator" are the
> > > wrong prefixKeys to look up.
> > >
> > > Sven
> > >
> > > Juergen Donnerstag wrote:
> > >
> > > >It shouldn't. I guess the important point is that
> > > >ComponentStringResourceLoade does not get the FormComponent (text1)
> > > >You don't start looking for text1 in the formComponents properties
> > > >file, do you? You start with the parent component containing text1. A
> > > >key text1 expresses that text1 is a child of the parent.
> > > >
> > > >Juergen
> > > >
> > > >On 11/5/05, Sven Meier < [EMAIL PROTECTED]> wrote:
> > > >
> > > >
> > > >>Hello Juergen,
> > > >>
> > > >>I've taken a short look on your code in the CVS :
> > > >>
> > > >>DefaultValidatorResourceKeyFactory.java:
> > > >>
> > > >>*  public* String newKey(IValidator validator, FormComponent
> formComponent)
> > > >>  {
> > > >>*    return* formComponent.getId () + *"."* +
> Classes.name(validator.getClass());
> > > >>  }
> > > >>
> > > >>ComponentStringResourceLoader.java:
> > > >>  ...
> > > >>  /// Build search stack
> > > >>/  Stack searchStack = *new* Stack();
> > > >>  searchStack.push(component);
> > > >>  String prefixKey = component.getId() + *"."* + key;
> > > >>
> > > >>I'm wondering if this leads to a duplicated ID of the validated
> > > >>component in prefixId? e.g.
> > > >>
> > > >>  form1.text1.text1.RequiredValidator
> > > >>
> > > >>But maybe I'm wrong - so I'll better give it a try on Monday.
> > > >>
> > > >>Thanks
> > > >>
> > > >>Sven
> > > >>
> > > >>Juergen Donnerstag wrote:
> > > >>
> > > >>
> > > >>
> > > >>>Repetition: Message retrieval for the following scenario -
> > > >>>form->panel->textfield - is currently not supported
> > > >>>
> > > >>>Let's say that we have the following component hierarchy:
> > > >>>APage
> > > >>>->BForm id="b"
> > > >>>-->XPanel id="x"
> > > >>>   ---->RequiredTextField id="foo"
> > > >>>-->YPanel id="y"
> > > >>>   ---->RequiredTextField id="foo"
> > > >>>
> > > >>>Sven made a suggestion on how to change which is not 100% compliant.
> I
> > > >>>worked a bit on it and I think I found a solution. An example:
> > > >>>
> > > >>>The Page looks like
> > > >>>              add(new Label("label"));
> > > >>>
> > > >>>              Form form1 = new Form("form1");
> > > >>>              add(form1);
> > > >>>               form1.add(new MyTextField("text1", "input-1"));
> > > >>>              form1.add(new MyTextField("text2", "input-2"));
> > > >>>
> > > >>>              Form form2 = new Form("form2");
> > > >>>              add(form2);
> > > >>>
> > > >>>              Panel panel1 = new Panel("panel1");
> > > >>>              form2.add(panel1);
> > > >>>               panel1.add(new MyTextField("text3", "input-3"));
> > > >>>              panel1.add(new MyTextField("text4", "input-4"));
> > > >>>
> > > >>>              Panel panel2 = new Panel("panel2");
> > > >>>              form2.add(panel2);
> > > >>>              panel2.add(new MyTextField("text5", "input-5"));
> > > >>>              panel2.add(new MyTextField("text6", "input-6"));
> > > >>>
> > > >>>And the properties file:
> > > >>>
> > > >>># Default message
> > > >>>RequiredValidator = Default message: ${label} required
> > > >>>
> > > >>># A Textfield with label
> > > >>>form1.text1 = text1label
> > > >>>form1.text1.RequiredValidator = ${label} is required
> > > >>>
> > > >>># A TextField without label. label should default to the
> formComponent's id
> > > >>>form1.text2.RequiredValidator = ${label} is required
> > > >>>
> > > >>># This one is wrong. Because the panel id is missing
> > > >>>form2.text3.RequiredValidator = wrong: text3333 is missing
> > > >>>
> > > >>># Must be like
> > > >>>form2.panel1.text3.RequiredValidator = ok: text3333
> is missing
> > > >>>
> > > >>>form2.panel1.text4 = Text4Label
> > > >>> form2.panel1.text4.RequiredValidator = ok: ${label}
> is missing
> > > >>>
> > > >>>form2.panel2.text5.RequiredValidator = ok: text555
> is missing
> > > >>>#form2.panel2.text6.RequiredValidator = ok: text555
> is missing
> > > >>>
> > > >>>form2.text5.RequiredValidator = wrong: text555 is missing
> > > >>>form2.text6.RequiredValidator = wrong: text555 is missing
> > > >>>
> > > >>>form2.panel1.text5.RequiredValidator = wrong:
> text555 is missing
> > > >>>form2.panel1.text6.RequiredValidator = wrong:
> text555 is missing
> > > >>>
> > > >>>I think it is 100% compliant now, solves the panel problem and as
> > > >>>suggested by Sven adds one more (IMO useful) feature; useful for
> > > >>>self-contained, re-usable components. The key (e.g.
> > > >>>text6.RequiredValidator) is prepended with the relativ path (virtual
> > > >>>root component is the component associated with the properties
> files).
> > > >>>His english is better than mine and his examples probably as well.
> > > >>>
> > > >>>I'll check it in tonight.
> > > >>>
> > > >>>Juergen
> > > >>>
> > > >>>
> > > >>>
> > > >>>On 10/29/05, Sven Meier <[EMAIL PROTECTED]> wrote:
> > > >>>
> > > >>>
> > > >>>
> > > >>>
> > > >>>>I've opened a bug, see:
> > > >>>>
> > > >>>>
> http://sourceforge.net/tracker/index.php?func=detail&aid=1339904&group_id=119783&atid=684975
> > > >>>>
> > > >>>>Sven
> > > >>>>
> > > >>>>Juergen Donnerstag wrote:
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>>Did you open a bug or RFE already? If not, please do so, otherwise
> > > >>>>>there is always a risk that it'll be forgotten.
> > > >>>>>
> > > >>>>>Juergen
> > > >>>>>
> > > >>>>>On 10/27/05, Martijn Dashorst < [EMAIL PROTECTED]> wrote:
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>>+1, if it doesn't break stuff.
> > > >>>>>>
> > > >>>>>>Martijn
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>On 10/27/05, Juergen Donnerstag <[EMAIL PROTECTED]>
> wrote:
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>Would you please open a bug for it. Thanks.
> > > >>>>>>>
> > > >>>>>>>As long as long as no one else on the list is against fixing it
> that
> > > >>>>>>>way, I'll try and put it into 1.1.
> > > >>>>>>>
> > > >>>>>>>Juergen
> > > >>>>>>>
> > > >>>>>>>On 10/27/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>>>Looks to me you are right. We didn't think about a Panel being
> a child
> > > >>>>>>>>>of a Form. I guess it was our assumption that FormComponents
> are
> > > >>>>>>>>>always a direct child of a Form.
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>Nested panels inside the same form was the first thing I checked
> when
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>evaluating Wicket. It's a very handy solution to break large forms
> into
> > > >>>>>>logical units.
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>I'm currently not able to look into the code. Do we traverse up
> the
> > > >>>>>>>>>component tree already, like you do?
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>Yes, code is taken from the current
> ComponentStringResourceLoader
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>(sorry,  I erroneously referred to
> > > >>>>>>DefaultComponentStringResourceLoader). I only
> introduced
> > > >>>>>>the variable 'hierarchicalKey'.
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>Isn't there a risk that due to equal ids, users get messages
> which
> > > >>>>>>>>>were not meant to be for that component.
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>Well, Wicket ensures that a path of a component is always
> unambiguous,
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>so
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>it works the same way as the name attributes are generated for
> HTML
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>input fields.
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>With my solution every component developer has full control over
> its
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>messages in its own scope. In the following example each panel
> doesn't know
> > > >>>>>>anything about its parents, but each parent is able to override
> the default
> > > >>>>>>message of its child:
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>- Panel1.jave has Textfield 'foo'
> > > >>>>>>>>- Panel1.properties contains 'foo.RequiredValidator=Foo is
> required'
> > > >>>>>>>>
> > > >>>>>>>>- Panel2.java uses Panel1.java as 'panel1'
> > > >>>>>>>>- Panel2.properties contains
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>'panel1.foo.RequiredValidator=Foo 1 is required'
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>- Page3.java uses Panel2.java as 'panel2' in a form 'form'
> > > >>>>>>>>- Page3.properties contains
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>'form.panel2.panel1.foo=Regretfully Foo 1 is
> required'
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>The developer of Page3 is able to override explicitly the
> message for
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>'foo' in Panel1.java.
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>Sven
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>>On 10/26/05, [EMAIL PROTECTED] < [EMAIL PROTECTED]> wrote:
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>Hello,
> > > >>>>>>>>>>
> > > >>>>>>>>>>I'm struggling with the way Wicket loads String resources,
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>particularly how
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>DefaultComponentStringResourceLoader loads
> validation
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>messages.
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>>Let's say that we have the following component hierarchy:
> > > >>>>>>>>>>APage
> > > >>>>>>>>>>->BForm id="b"
> > > >>>>>>>>>>-->XPanel id="x"
> > > >>>>>>>>>>  ---->RequiredTextField id="foo"
> > > >>>>>>>>>>-->YPanel id="y"
> > > >>>>>>>>>>  ---->RequiredTextField id="foo"
> > > >>>>>>>>>>
> > > >>>>>>>>>>XPanel knows nothing about its containing form or page,
> nevertheless
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>XPanel's validation keys must be prefexed with the form's id:
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>XPanel.properties :
> > > >>>>>>>>>> b.foo.RequiredValidator = Foo is required.
> > > >>>>>>>>>>
> > > >>>>>>>>>>IMHO this introduces an unwanted dependency of XPanel on its
> parental
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>form
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>(i.e. id="b").
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>Furthermore there is no way to override the foo messages
> separately
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>for
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>XPanel and YPanel:
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>APage.properties:
> > > >>>>>>>>>> b.foo.RequiredValidator = Foo is required in x ??
> > > >>>>>>>>>> b.foo.RequiredValidator = Foo is required in y ??
> > > >>>>>>>>>>
> > > >>>>>>>>>>Now I would prefer, that the validation text for XPanel's foo
> would
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>be
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>searched like in the following:
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>APage.properties:
> > > >>>>>>>>>> b.x.foo.RequiredValidator = Foo is extremely required.
> > > >>>>>>>>>>XPanel.properties:
> > > >>>>>>>>>> foo.RequiredValidator = Foo is required.
> > > >>>>>>>>>>
> > > >>>>>>>>>>YPanel's validation text could stay unaltered:
> > > >>>>>>>>>>
> > > >>>>>>>>>>YPanel.properties:
> > > >>>>>>>>>> foo.RequiredValidator = Foo is required.
> > > >>>>>>>>>>
> > > >>>>>>>>>>Fortunately Wicket is pluggable enough to set this straight:
> > > >>>>>>>>>>I've written my own ValidatorResourceKeyFactory, that omits
> the
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>form's id
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>from the key:
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>>>public String newKey(IValidator validator, FormComponent
> component)
> > > >>>>>>>>>>{
> > > >>>>>>>>>> return component.getId() + "." +
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>> Classes.name(validator.getClass());
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>>}
> > > >>>>>>>>>>
> > > >>>>>>>>>>With a custom ComponentStringResourceLoader the key to lookup
> a
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>message is
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>always prefixed with the ids of the parental components:
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>// Build search stack
> > > >>>>>>>>>>Stack searchStack = new Stack();
> > > >>>>>>>>>>searchStack.push(component);
> > > >>>>>>>>>>
> > > >>>>>>>>>>String hierarchicalKey = key;
> > > >>>>>>>>>>if (!(component instanceof Page))
> > > >>>>>>>>>>{
> > > >>>>>>>>>> MarkupContainer c = component.getParent();
> > > >>>>>>>>>> while (true)
> > > >>>>>>>>>> {
> > > >>>>>>>>>>   searchStack.push(c);
> > > >>>>>>>>>>   if (c instanceof Page)
> > > >>>>>>>>>>     break;
> > > >>>>>>>>>>   hierarchicalKey = c.getId() + "." + hierarchicalKey;
> > > >>>>>>>>>>   c = c.getParent();
> > > >>>>>>>>>> }
> > > >>>>>>>>>>}
> > > >>>>>>>>>>
> > > >>>>>>>>>>// Iterate through search stack
> > > >>>>>>>>>>String value = null;
> > > >>>>>>>>>>while (!searchStack.isEmpty())
> > > >>>>>>>>>>{
> > > >>>>>>>>>> Component c = (Component)searchStack.pop();
> > > >>>>>>>>>> Class cc = c.getClass();
> > > >>>>>>>>>>
> > > >>>>>>>>>> while ( value == null ) {
> > > >>>>>>>>>>   // Locate previously loaded resources from the cache
> > > >>>>>>>>>>   final String id = createCacheId(cc, style, locale);
> > > >>>>>>>>>>   ValueMap strings =
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>(ValueMap)resourceCache.get(id);
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>>   if (strings == null)
> > > >>>>>>>>>>   {
> > > >>>>>>>>>>     // No resources previously loaded, attempt to load them
> > > >>>>>>>>>>     strings = loadResources(c, cc, style, locale, id);
> > > >>>>>>>>>>   }
> > > >>>>>>>>>>
> > > >>>>>>>>>>   // Lookup value
> > > >>>>>>>>>>   value = strings.getString(hierarchicalKey);
> > > >>>>>>>>>>   if (value != null)
> > > >>>>>>>>>>     break;
> > > >>>>>>>>>>
> > > >>>>>>>>>>   // Move to next superclass
> > > >>>>>>>>>>   cc = cc.getSuperclass();
> > > >>>>>>>>>>   if (isStopResourceSearch(cc)) break;
> > > >>>>>>>>>> }
> > > >>>>>>>>>> if (value != null) {
> > > >>>>>>>>>>   break;
> > > >>>>>>>>>> } else {
> > > >>>>>>>>>>   hierarchicalKey =
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>hierarchicalKey.substring(hierarchicalKey.indexOf ('.') + 1);
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>> }
> > > >>>>>>>>>>}
> > > >>>>>>>>>>
> > > >>>>>>>>>>// Return the resource value (may be null if resource was not
> found)
> > > >>>>>>>>>>return value;
> > > >>>>>>>>>>
> > > >>>>>>>>>>Works great :).
> > > >>>>>>>>>>
> > > >>>>>>>>>>Now I really wonder who would want to use the
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>DefaultComponentStringResourceLoader at all? I
> don't
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>think that its way of
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>loading resources is useful, since it will introduce
> dependencies and
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>sooner
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>or later you'll run into name clashes. IMHO this severely
> hinders reuse
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>of
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>components inside of forms.
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>Note that my solution also works nicely with localization of
> other
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>components, e.g. the RadioChoice (line 393).
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>>Thanks
> > > >>>>>>>>>>
> > > >>>>>>>>>>Sven
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > >
> >>>>>>-------------------------------------------------------
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>>This SF.Net email is sponsored by the JBoss Inc.
> > > >>>>>>>>>>Get Certified Today * Register for a JBoss Training Course
> > > >>>>>>>>>>Free Certification Exam for All Training Attendees Through End
> of
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>2005
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>>Visit
> http://www.jboss.com/services/certification
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>for more information
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > >
> >>>>>>>>>>_______________________________________________
> > > >>>>>>>>>>Wicket-user mailing list
> > > >>>>>>>>>>Wicket-user@lists.sourceforge.net
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > >
> >>>>>>https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > >
> >>>>>>>-------------------------------------------------------
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>>>This SF.Net email is sponsored by the JBoss Inc.
> > > >>>>>>>>>Get Certified Today * Register for a JBoss Training Course
> > > >>>>>>>>>Free Certification Exam for All Training Attendees Through End
> of 2005
> > > >>>>>>>>>Visit
> http://www.jboss.com/services/certification for
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>more information
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > >
> >>>>>>>>>_______________________________________________
> > > >>>>>>>>>Wicket-user mailing list
> > > >>>>>>>>>Wicket-user@lists.sourceforge.net
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > >
> >>>>>>https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > >
> >>>>>>>>-------------------------------------------------------
> > > >>>>>>>>This SF.Net email is sponsored by the JBoss Inc.
> > > >>>>>>>>Get Certified Today * Register for a JBoss Training Course
> > > >>>>>>>>Free Certification Exam for All Training Attendees Through End
> of 2005
> > > >>>>>>>>Visit
> http://www.jboss.com/services/certification for
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>more information
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>>_______________________________________________
> > > >>>>>>>>Wicket-user mailing list
> > > >>>>>>>>Wicket-user@lists.sourceforge.net
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > >
> >>>>>>https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > >
> >>>>>>>-------------------------------------------------------
> > > >>>>>>>This SF.Net email is sponsored by the JBoss Inc.
> > > >>>>>>>Get Certified Today * Register for a JBoss Training Course
> > > >>>>>>>Free Certification Exam for All Training Attendees Through End of
> 2005
> > > >>>>>>>Visit
> http://www.jboss.com/services/certification for
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>more information
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>>_______________________________________________
> > > >>>>>>>Wicket-user mailing list
> > > >>>>>>>Wicket-user@lists.sourceforge.net
> > > >>>>>>>
> https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>
> > > >>>>>>
> > >
> >>>>>-------------------------------------------------------
> > > >>>>>This SF.Net email is sponsored by the JBoss Inc.
> > > >>>>>Get Certified Today * Register for a JBoss Training Course
> > > >>>>>Free Certification Exam for All Training Attendees Through End of
> 2005
> > > >>>>>Visit http://www.jboss.com/services/certification
> for more information
> > > >>>>>_______________________________________________
> > > >>>>>Wicket-user mailing list
> > > >>>>>Wicket-user@lists.sourceforge.net
> > > >>>>>
> https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > >
> >>>>-------------------------------------------------------
> > > >>>>This SF.Net email is sponsored by the JBoss Inc.
> > > >>>>Get Certified Today * Register for a JBoss Training Course
> > > >>>>Free Certification Exam for All Training Attendees Through End of
> 2005
> > > >>>>Visit http://www.jboss.com/services/certification
> for more information
> > > >>>>_______________________________________________
> > > >>>>Wicket-user mailing list
> > > >>>> Wicket-user@lists.sourceforge.net
> > >
> >>>>https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > >
> >>>-------------------------------------------------------
> > > >>>SF.Net email is sponsored by:
> > > >>>Tame your development challenges with Apache's Geronimo App Server.
> Download
> > > >>>it for free - -and be entered to win a 42" plasma tv or your very own
> > > >>>Sony(tm)PSP.  Click here to play:
> http://sourceforge.net/geronimo.php
> > > >>>_______________________________________________
> > > >>>Wicket-user mailing list
> > > >>>Wicket-user@lists.sourceforge.net
> > >
> >>>https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >>>
> > > >>>
> > > >>>
> > > >>>
> > > >>>
> > > >>
> > >
> >>-------------------------------------------------------
> > > >>SF.Net email is sponsored by:
> > > >>Tame your development challenges with Apache's Geronimo App Server.
> Download
> > > >>it for free - -and be entered to win a 42" plasma tv or your very own
> > > >>Sony(tm)PSP.  Click here to play:
> http://sourceforge.net/geronimo.php
> > > >>_______________________________________________
> > > >>Wicket-user mailing list
> > > >>Wicket-user@lists.sourceforge.net
> > > >>
> https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >>
> > > >>
> > > >>
> > > >
> > > >
> > >
> >-------------------------------------------------------
> > > >SF.Net email is sponsored by:
> > > >Tame your development challenges with Apache's Geronimo App Server.
> Download
> > > >it for free - -and be entered to win a 42" plasma tv or your very own
> > > >Sony(tm)PSP.  Click here to play:
> http://sourceforge.net/geronimo.php
> > > >_______________________________________________
> > > >Wicket-user mailing list
> > > >Wicket-user@lists.sourceforge.net
> > >
> >https://lists.sourceforge.net/lists/listinfo/wicket-user
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > >
> > > -------------------------------------------------------
> > > SF.Net email is sponsored by:
> > > Tame your development challenges with Apache's Geronimo App Server.
> Download
> > > it for free - -and be entered to win a 42" plasma tv or your very own
> > > Sony(tm)PSP.  Click here to play:
> http://sourceforge.net/geronimo.php
> > > _______________________________________________
> > > Wicket-user mailing list
> > > Wicket-user@lists.sourceforge.net
> > >
> https://lists.sourceforge.net/lists/listinfo/wicket-user
> > >
> >
> >
> > -------------------------------------------------------
> > SF.Net email is sponsored by:
> > Tame your development challenges with Apache's Geronimo App Server.
> Download
> > it for free - -and be entered to win a 42" plasma tv or your very own
> > Sony(tm)PSP.  Click here to play:
> http://sourceforge.net/geronimo.php
> > _______________________________________________
> > Wicket-user mailing list
> > Wicket-user@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/wicket-user
> >
>
>
>
> --
>  Ingram Chen
> Java [EMAIL PROTECTED]
> Institue of BioMedical Sciences Academia Sinica Taiwan
> blog: http://www.javaworld.com.tw/roller/page/ingramchen


-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to