« 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

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>.

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



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@...
For additional commands, e-mail: users-help@...

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