My issue isn't with label, it's with the inputs.  I have the following in my
custom ValidationDelegate:

    public void writeAttributes(IMarkupWriter writer, IRequestCycle cycle,
                                IFormComponent component, IValidator
validator) {
        if (isInError()) {
            String cssClass = ((component.getBinding("class") != null) ?
                               
component.getBinding("class").getObject().toString() : "");
            writer.attribute("class", cssClass + " error");
        }
    }

However, rather than just writing a single "class" attribute, it writes two:

class="text large error" class="text large"

Obviously, this is not a big deal, but I would consider it a bug.  As far as
overriding FieldLabel, I figured out how to do that.  I'll enter an
enhancement request in JIRA to allow writing markup within the <label> tag.

Thanks,

Matt



Jessek wrote:
> 
> Sure, but at that point you are basically overriding the behaviour
> provided
> by the ValidationDelegate when it does before/after field rendering (not
> talking about FieldLabel).
> 
> The FieldLabel component already supports informal parameters.
> 
> I noticed in your first email you mentioned trying to do this with
> something
> like
> 
> <label jwcid="mycompid" class="class1 class2" > and only saw class1
> output.
> 
> Try doing this instead (though I agree it sounds like a bug somehow):
> 
> <label jwcid="mycompid" class="ognl:'class class2'" />
> 
> On 6/1/06, Matt Raible <[EMAIL PROTECTED]> wrote:
>>
>> Is there an easy way to subclass FieldLabel and override the
>> renderComponent() method to move writeLabelPrefix and
>> writeLabelSuffix to be inside <label>?
>>
>> Thanks,
>>
>> Matt
>>
>> On May 31, 2006, at 2:51 PM, Ryan Holmes wrote:
>>
>> > Your problem getting the span tag where you want it is due to how
>> > the FieldLabel component renders itself. Here's the relevant part
>> > of FieldLabel.renderComponent():
>> >
>> >        delegate.writeLabelPrefix(field, writer, cycle);
>> >        writer.begin("label");
>> >        if (id != null)
>> >            writer.attribute("for", id);
>> >        delegate.writeLabelAttributes(writer, cycle, field);
>> >        renderInformalParameters(writer, cycle);
>> >        writer.print(displayName, getRaw());
>> >        writer.end();
>> >        delegate.writeLabelSuffix(field, writer, cycle);
>> >
>> >
>> > You could argue that writeLabelPrefix() and writeLabelSuffix()
>> > should both be inside the <label> tag (makes sense to me), but the
>> > current code is symmetrical and not necessarily "wrong." Your best
>> > bet is probably to override the FieldLabel component with your own
>> > version that renders the delegate prefix and/or suffix inside the
>> > label tag. And I'm sure you won't hesitate to file a bug report if
>> > you  feel strongly about it ;)
>> >
>> > -Ryan
>> >
>> >
>> > Matt Raible wrote:
>> >
>> >> Matt Raible wrote:
>> >>
>> >>> Andreas Andreou wrote:
>> >>>
>> >>>> try component.getBinding("class")
>> >>>> if that's not null, do a getObject() on it
>> >>>
>> >>>
>> >>>
>> >>> Thanks.  This works, but it also prints out duplicate "class"
>> >>> attributes.
>> >>>
>> >>> class="text large error" class="text large"
>> >>>
>> >>>
>> >>> It'd be nice to have something like:
>> >>>
>> >>> writer.appendAttribute("class", "values to append");
>> >>>
>> >>> Another question - it seems my full <label> and <input> is
>> >>> getting wrapped with
>> >>>
>> >>> <font color="red">
>> >>>
>> >>> Is there anyway to get rid of that?  It's problematic b/c the
>> >>> closing </font> isn't getting rendered until right before </form>.
>> >>
>> >>
>> >> Fixed this by using:
>> >>
>> >>    public void writeLabelPrefix(IFormComponent component,
>> >>                                 IMarkupWriter writer,
>> >> IRequestCycle cycle) {
>> >>        // does nothing put prevent <font color="red"> from getting
>> >> written
>> >>    }
>> >>
>> >>>
>> >>> Thanks,
>> >>>
>> >>> Matt
>> >>>
>> >>>>
>> >>>> Matt Raible wrote:
>> >>>>
>> >>>>> Hmmm, I'm guessing the answers to my questions below are "no,
>> >>>>> this isn't possible." ;-)
>> >>>>>
>> >>>>> Here's another question - is it possible in my custom Validator
>> >>>>> to get the existing CSS classes on a component?  For example, I
>> >>>>> currently have:
>> >>>>>
>> >>>>>    public void writeLabelAttributes(IMarkupWriter writer,
>> >>>>> IRequestCycle cycle, IFormComponent component) {
>> >>>>>        if (isInError(component)) {
>> >>>>>            writer.attribute("class", "error");
>> >>>>>        }
>> >>>>>    }
>> >>>>>
>> >>>>>    public void writeAttributes(IMarkupWriter writer,
>> >>>>> IRequestCycle cycle,
>> >>>>>                                IFormComponent component,
>> >>>>> IValidator validator) {
>> >>>>>        if (isInError()) {
>> >>>>>            writer.attribute("class", "error");
>> >>>>>        }
>> >>>>>    }
>> >>>>>
>> >>>>> But I'd prefer to have something like this:
>> >>>>>
>> >>>>>    public void writeLabelAttributes(IMarkupWriter writer,
>> >>>>> IRequestCycle cycle, IFormComponent component) {
>> >>>>>        if (isInError(component)) {
>> >>>>>            writer.attribute("class", "error " +
>> >>>>> component.getAttribute("class"));
>> >>>>>        }
>> >>>>>    }
>> >>>>>
>> >>>>>    public void writeAttributes(IMarkupWriter writer,
>> >>>>> IRequestCycle cycle,
>> >>>>>                                IFormComponent component,
>> >>>>> IValidator validator) {
>> >>>>>        if (isInError()) {
>> >>>>>            writer.attribute("class", "error " +
>> >>>>> component.getAttribute("class"));
>> >>>>>        }
>> >>>>>    }
>> >>>>>
>> >>>>> In other words, is there a method on component that allows me
>> >>>>> to get the current CSS classes?
>> >>>>>
>> >>>>> Matt
>> >>>>>
>> >>>>> Matt Raible wrote:
>> >>>>>
>> >>>>>> I have two different "Label" components I'm trying to create.
>> >>>>>> Issue #1
>> >>>>>> ---------------------------
>> >>>>>> The first is a simple component (just a Label.jwc and
>> >>>>>> Label.html file in WEB-INF) that writes a <label>.  I'd like
>> >>>>>> to include the option to write a "required" indicator.
>> >>>>>> However, I'm having a difficult time retrieving a parameter's
>> >>>>>> value.  Here's what I have so far:
>> >>>>>>
>> >>>>>> Label.jwc
>> >>>>>> <component-specification allow-informal-parameters="yes">
>> >>>>>>    <parameter name="key" required="yes"/>
>> >>>>>>    <parameter name="class" required="no"/>
>> >>>>>>    <component id="label" type="Any" inherit-informal-
>> >>>>>> parameters="yes"/>
>> >>>>>> </component-specification>
>> >>>>>>
>> >>>>>> Label.html
>> >>>>>> <label jwcid="label"><span jwcid="@Insert"
>> >>>>>> value="ognl:getMessages().getMessage(key)"/> <div jwcid="@If"
>> >>>>>> condition="ognl:class == 'required'"><span class="req"> *</
>> >>>>>> span></label>
>> >>>>>>
>> >>>>>> I'm pretty sure "class" won't work as a parameter name b/c
>> >>>>>> I've seen a stacktrace using this already.  Regardless, let's
>> >>>>>> pretend it does (I've tried using other names).  Here's the
>> >>>>>> desired usage:
>> >>>>>>
>> >>>>>> <label class="required desc" jwcid="@Label" for="phoneNumber"
>> >>>>>> key="user.phoneNumber">Phone Number</label> produces:
>> >>>>>>
>> >>>>>> <label class="desc" jwcid="@Label" for="phoneNumber">Phone
>> >>>>>> Number<span class="req"> *</label>
>> >>>>>>
>> >>>>>> I'm fine with the result having class="required desc" - I
>> >>>>>> basically just need some indicator to show a field is required
>> >>>>>> when I'm not wiring up it's input field as a component.
>> >>>>>>
>> >>>>>> Issue #2
>> >>>>>> ---------------------------
>> >>>>>> I'm overriding ValidationDelegate in order to add required
>> >>>>>> field indicators.  I used to be pre-pending an asterisk to the
>> >>>>>> beginning of the field, and I had that working.  Now I want to
>> >>>>>> add <span class="req"> to the end of the <label> before the </
>> >>>>>> label> shows up.  I'm using @FieldLabel and everything
>> >>>>>> *almost* works. I've eliminating error styling in the class
>> >>>>>> below so it's easier to read.
>> >>>>>>
>> >>>>>> public class Validator extends ValidationDelegate {
>> >>>>>>    public void writeLabelSuffix(IFormComponent component,
>> >>>>>>                                 IMarkupWriter writer,
>> >>>>>> IRequestCycle cycle) {
>> >>>>>>        if (component.isRequired()) {
>> >>>>>>            writer.begin("span");
>> >>>>>>            writer.attribute("class", "req");
>> >>>>>>            writer.printRaw(" *");
>> >>>>>>            writer.end();
>> >>>>>>        }
>> >>>>>>    }
>> >>>>>>
>> >>>>>> The code above results in <label>blah blah</label><span
>> >>>>>> class="req"> *</span>, when I'd rather have the <span> w/in
>> >>>>>> the <label>.  I tried overriding writeLabelAttributes(), but
>> >>>>>> that doesn't seem to allow me to create a new tag and write it
>> >>>>>> out w/in the label.  Am I missing something here?  Has anyone
>> >>>>>> done something like this - or knows how to add a <span>
>> >>>>>> withing an @FieldLabel?
>> >>>>>>
>> >>>>>> Thanks,
>> >>>>>>
>> >>>>>> Matt
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ------------------------------------------------------------------
>> >>>>> ---
>> >>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>> >>>>>
>> >>>>>
>> >>>>
>> >>>> -------------------------------------------------------------------
>> >>>> --
>> >>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >>>> For additional commands, e-mail: [EMAIL PROTECTED]
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>> --------------------------------------------------------------------
>> >>> -
>> >>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >>> For additional commands, e-mail: [EMAIL PROTECTED]
>> >>>
>> >>
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >> For additional commands, e-mail: [EMAIL PROTECTED]
>> >>
>> >>
>> >
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: [EMAIL PROTECTED]
>> > For additional commands, e-mail: [EMAIL PROTECTED]
>> >
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> 
> -- 
> Jesse Kuhnert
> Tacos/Tapestry, team member/developer
> 
> Open source based consulting work centered around
> dojo/tapestry/tacos/hivemind.
> 
> 
--
View this message in context: 
http://www.nabble.com/Issues+with+Label+Components+with+Tapestry+4.0-t1686779.html#a4670544
Sent from the Tapestry - User forum at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to