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