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 > > > >