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.