myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Delbecq <de...@oma.be>
Subject Re: Custom component, validation messages
Date Fri, 17 Nov 2006 08:45:25 GMT
Thanks! This was a very useful response.
David Chandler a écrit :
> Oh, I think I see now. You could write a phase listener to run before
> RENDER_RESPONSE that looks for messages associated with your
> sub-components, removes them from the messages queue, and adds them
> associated with the parent instead, like this... :-)
>
> package com.learnjsf.util.faces;
>
> import java.util.Iterator;
>
> import javax.faces.application.FacesMessage;
> import javax.faces.context.FacesContext;
> import javax.faces.event.PhaseEvent;
> import javax.faces.event.PhaseId;
> import javax.faces.event.PhaseListener;
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> public class ComponentMessageAggregatorListener implements
> PhaseListener {
>
>     private static final Log log = LogFactory
>             .getLog(ComponentMessageAggregatorListener.class);
>
>     public ComponentMessageAggregatorListener() {
>     }
>
>     public PhaseId getPhaseId() {
>         return PhaseId.RENDER_RESPONSE;
>     }
>
>     public void afterPhase(PhaseEvent event) {
>     }
>
>     public void beforePhase(PhaseEvent event) {
>
>         FacesContext facesContext = event.getFacesContext ();
>         for (Iterator i = facesContext.getClientIdsWithMessages();
> i.hasNext();) {
>             String clientId = (String) i.next();
>             String parentId = null;
>             /*
>              * your parsing logic here to set parent ID if clientId is
> one you
>              * recognize as a subcomponent
>              * if (clientId matches some pattern)
>              *   set parentId = the parent part
>              */
>             // Remove the child component's message(s) and attach to
> the parent instead
>             if (parentId != null)
>                 for (Iterator msgs =
> facesContext.getMessages(clientId); msgs
>                         .hasNext();) {
>                     FacesMessage fm = (FacesMessage) msgs.next ();
>                     facesContext.addMessage(parentId, fm);
>                     msgs.remove();
>                 }
>         }
>     }
>
> }
>
> On 11/15/06, * delbd* <delbd@oma.be <mailto:delbd@oma.be>> wrote:
>
>     I was hoping there could be some suggestion on how to transfert
>     messages
>     from component id X:a to component id X. I'd like to give user
>     opportunity to put those error message where ever they want. But
>     maybe i
>     should better do 'component X internal validation that check values of
>     it's subcomponents', it seems more logical now.
>
>     Thanks for your answers, at least i know i am not missing some obvious
>     possibility :)
>
>     Martin Marinschek a écrit :
>     > If he can integrate the message-component in the
>     input-component, then
>     > that's an option, right!
>     >
>     > regards,
>     >
>     > Martin
>     >
>     > On 11/14/06, David Chandler <david.chandler@learnjsf.com
>     <mailto:david.chandler@learnjsf.com>> wrote:
>     >> I may not be understanding your question correctly, but if you're
>     >> adding the
>     >> input sub-components programatically, you could add the associated
>     >> message
>     >> sub-components programatically at the same time. Call setId()
>     on each
>     >> input
>     >> component to give it its own ID that you can then use in for=
>     on the
>     >> corresponding message component.
>     >>
>     >> /dmc
>     >>
>     >> --
>     >> David Chandler
>     >> Development Coach
>     >> learnjsf.com <http://learnjsf.com>
>     >>
>     >> On 11/14/06, David Delbecq <delbd@oma.be <mailto:delbd@oma.be>>
>     wrote:
>     >> > Hi,
>     >> >
>     >> > I have a custom component ( let's say assume has id X ) that is
>     >> made of
>     >> > several Input component ( let's say X:a, X:b, X:c)
>     >> >
>     >> > Is it possible to have the error messages for X also contains the
>     >> error
>     >> > for X:a X:b and X:c. I  assume user will want something like
>     >> > <h:message for="X"/>
>     >> >
>     >> > and not have to write
>     >> >
>     >> > <h:message for="X"/>
>     >> > <h:message for="X:a"/>
>     >> > <h:message for="X:b"/>
>     >> > <h:message for="X:c"/>
>     >> >
>     >> > Is there some mechanics in myfaces that can be of any help to
>     me? Do i
>     >> > have to manually transfer message in the component, and if
>     yes, when?
>     >> >
>     >>
>     >>
>     >>
>     >>
>     >
>     >
>
>
>
>
> -- 
> David Chandler
> Development Coach
> learnjsf.com <http://learnjsf.com> 


Mime
View raw message