|
View:
New views
11 Messages
—
Rating Filter:
Alert me
|
|
|
Issues with Label Components with Tapestry 4.0I 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@... |
|
|
Re: Issues with Label Components with Tapestry 4.0Hmmm, 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@... |
|
|
Re: Issues with Label Components with Tapestry 4.0try component.getBinding("class")
if that's not null, do a getObject() on it 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@... |
|
|
Re: Issues with Label Components with Tapestry 4.0Andreas 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@... |
|
|
Re: Issues with Label Components with Tapestry 4.0Matt 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: 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@... > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscribe@... For additional commands, e-mail: users-help@... |
|
|
Re: Issues with Label Components with Tapestry 4.0Your 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: 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@... >> > > > > --------------------------------------------------------------------- > 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@... |
|
|
Re: Issues with Label Components with Tapestry 4.0Is 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: 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@... >>> >> >> >> >> --------------------------------------------------------------------- >> 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@... |
|
|
Re: Issues with Label Components with Tapestry 4.0Sure, 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 <mraible@...> 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: 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@... > >>> > >> > >> > >> > >> --------------------------------------------------------------------- > >> 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@... > > -- Jesse Kuhnert Tacos/Tapestry, team member/developer Open source based consulting work centered around dojo/tapestry/tacos/hivemind. |
|
|
Re: Issues with Label Components with Tapestry 4.0My 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
|
|
|
Re: Issues with Label Components with Tapestry 4.0I have the same need to add a span in the label. Did you ever come up
with a complete solution to this? On 6/1/06, mraible <matt@...> wrote: > > 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 <mraible@...> 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: 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@... > >> >>> > >> >> > >> >> > >> >> > >> >> --------------------------------------------------------------------- > >> >> 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@... > >> > >> > > > > > > -- > > 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: users-unsubscribe@... > For additional commands, e-mail: users-help@... > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscribe@... For additional commands, e-mail: users-help@... |
|
|
Re: Issues with Label Components with Tapestry 4.0I ended up overriding the default FieldLabel:
http://fisheye5.cenqua.com/qsearch/appfuse/?q=FieldLabel |
| Free embeddable forum powered by Nabble | Forum Help |