[jsr-314-open] Mixing an ajax tag with a rendered attribute

Dan Allen dan.j.allen at GMAIL.COM
Thu May 28 22:03:23 EDT 2009


On Thu, May 28, 2009 at 6:40 PM, Jim Driscoll <Jim.Driscoll at sun.com> wrote:

> This is one of those "we should have seen this coming" bugs  (and for all I
> know, maybe others did - but I hadn't thought about it).
>
> https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1139
>
>
> If you're doing this:
>
>            <h:panelGrid>
>                <h:outputText value="Shipping/Billing address is the same"
> />
>                <h:selectBooleanCheckbox value="true" >
>                    <f:ajax listener="#{order.toggle}"
> render="shippingGroup"/>
>                </h:selectBooleanCheckbox>
>            </h:panelGrid>
>            <h:panelGroup id="shippingGroup"
> rendered="#{order.renderShipping}">
>                <fieldset>
>                    <legend>Shipping Address</legend>
>                    <comp:address id="shippingAddress"
>                                  city="#{addressBean.city}"
>                                  state="#{addressBean.state}"
>                                  zip="#{addressBean.zip}"
>                                  street="#{addressBean.street}" />
>                </fieldset>
>            </h:panelGroup>
>
>
> where "toggle" changed the order.renderShipping property, then it's going
> to fail in both directions - both when you change from not rendered to
> rendered (because we're doing an update on something that doesn't exist) and
> when changing from rendered to not rendered (because we're doing an update
> that won't have any data).
>
> The upshot - if you're using f:ajax to toggle the rendered attribute of
> something that you're rendering, it's not going to work.


This is a very familiar issue for developers that have used Ajax4jsf for any
length of time. So common, in fact, that Ajax4jsf offers a component which
renders a placeholder to make this very use case possible. Max Katz even
dedicates a whole section of Practical RichFaces on the problem. So I would
be very interested to here what Mr. Smirmov has to say given that he has
likely lost nights of sleep thinking about how to deal with it ;)

Of course, the simple solultion is to use a wrapper component (such as a
panelGroup) which is rerendered and have the toggle inside of that wrapper.

-Dan


-- 
Dan Allen
Senior Software Engineer, Red Hat | Author of Seam in Action

http://mojavelinux.com
http://mojavelinux.com/seaminaction
http://in.relation.to/Bloggers/Dan

NOTE: While I make a strong effort to keep up with my email on a daily
basis, personal or other work matters can sometimes keep me away
from my email. If you contact me, but don't hear back for more than a week,
it is very likely that I am excessively backlogged or the message was
caught in the spam filters.  Please don't hesitate to resend a message if
you feel that it did not reach my attention.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jsr-314-open-mirror/attachments/20090528/c0870216/attachment.html 


More information about the jsr-314-open-mirror mailing list