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]