Hi Werner, 

Thank you for help. but  I don't really get your point about ResponseWriter 
extension.

I looked around the code, and I only find out PartialReponseWriter object is 
instantiated in the hard code. I

like below,
 org.apache.myfaces.context.servlet.PartialViewContextImpl{
...
                _partialResponseWriter = new 
PartialResponseWriterImpl(responseWriter);
...
}
.
and this code in org.apache.myfaces.context.servlet.PartialViewContextImpl has 
used FacesContext.setResponseWriter method to set PartialResponseWriter object. 
So can you explain your idea in more detail? thank a lot.

further, 

I have submit a new topic about "Ajax Error Handler problem", sorry for hacking 
the code again.

Mark



On Jun 23, 2010, at 9:00 PM, Werner Punz wrote:

> Hi Mark this would be a good idea to post the problem in issue tracker for 
> the spec, so that it might be covered in a future revision.
> Btw. a cleaner solution probably would be to write your own partial response 
> writer on top of the existing one which adds the info regarding the messages 
> (or embed it in the extends part which is used for extensions)
> The ResponseWriter is delivered from the FacesContext, which has a clear 
> extension point to get it in.
> 
> I would not hack it into the impl, I´d rather use one of the extension points 
> that way you can ensure that it works over myfaces and mojarra.
> 
> 
> Werner
> 
> 
> Am 23.06.10 10:01, schrieb Mark Li:
>> 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
>>> [email protected]
>>> 
>>> 
>>> 
>>> 
>> 
> 
> 

Reply via email to