Hi everyone, 

1、to Werner, i hates it too, i dont like use update, its not a universal 
solution.
2、to Jakob, h:messages is a solution, i used to use it. but when you want to 
show some message dialog, you have to add things in very page, even in every 
form.  very ugly.

my solution is hack the sourcecode, hehe.


Java Side:
org.apache.myfaces.context.servlet.PartialViewContextImpl{

....

private void processPartialRendering(UIViewRoot viewRoot, PhaseId phaseId){

            List<FacesMessage> messages = _facesContext.getMessageList();
            Integer messageSize = 0;
            StringBuffer sb = new StringBuffer();
            if(messages != null){
                messageSize = messages.size();
                for(FacesMessage m : messages){
                        if(m.isRendered())
                                continue;
                        sb.append("<message 
severity=\"").append(m.getSeverity().getOrdinal()).append("\"><![CDATA[").append(m.getSummary()).append("]]></message>");
                        m.rendered();
                }
            }
            writer.append("<update id=\"javax.faces.MessageState\" 
size=\"").append(messageSize.toString()).append("\">").append(sb).append("</update>");



}
...
}

also jsf.js

myfaces._impl.xhrCore._AjaxResponse.prototype.processUpdate{
...

        }else if (node.getAttribute("id") == "javax.faces.MessageState") {
                if(node.getAttribute("size") != "0"){
                        var  m = [];
                        var mn = node.childNodes;
                        for(var i = 0 ; i < mn.length ; i ++ ){
                                if(mn[i].tagName == 'message'){
                                        m[m.length]= 
{message:mn[i].textContent, severity:mn[i].getAttribute("severity")};
                                }
                        }
                        request.responseMessages = m;
                        request.responseMessageSize = 
node.getAttribute("size"); 
                }
       } else {
            var cDataBlock = myfaces._impl._util._Utils.concatCDATABlocks(node);

....
}
myfaces._impl.core._jsfImpl.prototype.sendError {
......
            eventData.source = context.source;
            eventData.responseXML = request.responseXML;
            eventData.responseText = request.responseText;
            eventData.responseCode = request.status
            eventData.responseMessages = request.responseMessages;
            eventData.responseMessageSize = request.responseMessageSize;

...
}

myfaces._impl.core._jsfImpl.prototype.sendEvent{
                eventData.responseXML = request.responseXML;
                eventData.responseText = request.responseText;
                eventData.responseCode = request.status
                eventData.responseMessages = request.responseMessages;
                eventData.responseMessageSize = request.responseMessageSize;
}

I think you will not like it, but its a final solution to me.

anyway, the specification should give a solution about delivery messages in 
ajax via jsf.ajax.request.


Mark.



On Jun 13, 2010, at 1:11 PM, Mark Li wrote:

> when i use jsf.ajax, i cant find out any information about facesmessage. 
> I have looked into "Event Object", but find nothing.
> 
> My situation is,
> 
> jsf.ajax.request(this, event,{ 
>       onerror:function(data){alert('nothing happened!')},
>       onevent:function(data){
>       //if there is message do something. will do like keep dialog.
>       //if there is no message do otherthings. will do like close dialog;
>       }
> } );
> 
> 
> Can anyone help?
> 
> thx
>  
> 
> 
> Best Regard
> 
> Mark Li
> xihan...@gmail.com
> 
> 
> 
> 

Reply via email to