Hi werner, i know the <error> protocol, but i mean i want to handle the error
in the server side, Like converter the specific exception to a certain message
or convert to other exception. Then the message will be transferred via
<error> to client side.
this is a littler difference with the other topic about "How can I notice if
there are facesmessages via ajax".
On Jun 24, 2010, at 5:10 AM, Werner Punz wrote:
> Hia mark since you are directly on the response writer anyway, look at the
> ajax protocol it has an <error> part where you can drag in errors which are
> pushed into the ajax error listener queue automatically:
>
> <partial-response>
> <error>
> <error-name>...</error-name>
> <error-message>...</error-message>
> </error>
> </partial-response>
>
> thats how it looks the error then is issued and an error listener is
> triggered.
> The partialResponseWriter should have a startError element afair.
>
>
> Werner
>
>
>
> Am 23.06.10 18:56, schrieb Mark Li:
>> Hi everyone,
>>
>> There is any solution for Ajax Error Handler? the
>> "org.apache.myfaces.ERROR_HANDLER" seems dont work.
>>
>>
>> The following is my temp solution:
>>
>> I hack the code about ajax exception handler. because I try the error
>> handler extension, it doesnot work for ajax. and I cant find out any
>> extension point either.
>>
>> there is my code:
>> org.apache.myfaces.renderkit.ErrorPageWriter
>> {
>> .....
>> public static void handleThrowable(FacesContext facesContext, Throwable ex)
>> throws FacesException
>> {
>> ...
>>
>> if(!ajaxErrorHandlerInited){
>> try {
>> String ajaxErrorHandlerString =
>> facesContext.getExternalContext().getInitParameter("org.apache.myfaces.AJAX_ERROR_HANDLER");
>> if(ajaxErrorHandlerString != null){
>> Class<?> handler =
>> ErrorPageWriter.class.getClassLoader().loadClass(ajaxErrorHandlerString);
>> ajaxErrorHandler = handler.newInstance();
>> ajaxErrorHandlerMethod =
>> ajaxErrorHandler.getClass().getMethod("handleException", FacesContext.class,
>>
>> }
>> } catch (Throwable e) {
>> e.printStackTrace();
>> } finally{
>> ajaxErrorHandlerInited = true;
>> }
>> }
>>
>> if(ajaxErrorHandler != null){
>> try {
>> String message = (String)
>> ajaxErrorHandlerMethod.invoke(ajaxErrorHandler, facesContext, ex);
>> partialWriter.write(message);
>> } catch (Throwable e) {
>> e.printStackTrace();
>> if(ex.getCause() == null)
>> partialWriter.write(ex.getCause().toString());
>> else
>> partialWriter.write(ex.getMessage());
>> }
>> }else{
>> if (ex.getCause() != null)
>> {
>> partialWriter.write(ex.getCause().toString());
>> }
>> else
>> {
>> partialWriter.write(ex.getMessage());
>> }
>> }
>>
>> ...
>> }
>> .....
>>
>> }
>>
>> you can see I define a new "org.apache.myfaces.AJAX_ERROR_HANDLER" parameter
>> for myfaces. myfaces or specification should have this feature.
>>
>> Best Regard
>>
>> Mark
>>
>>
>
>