« Return to Thread: Issues with Label Components with Tapestry 4.0

Re: Issues with Label Components with Tapestry 4.0

by mraible@virtuas :: Rate this Message:

Reply to Author | View in Thread

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: users-unsubscribe@...
For additional commands, e-mail: users-help@...

 « Return to Thread: Issues with Label Components with Tapestry 4.0