dwr.xml:
<dwr>
<allow>
<create javascript="UserService" creator="spring" >
<param name="beanName" value="userService"></param>
</create>
<!--調用UserService中的方法時將被DWRFilter攔截-->
<filter class="com.test.filter.DWRFilter"></filter>
<convert match="com.test.bean.User" converter="bean"></convert>
<!-調用UserService中的方法返回空對象時,讓Dwr報錯-->
<convert match="java.lang.NullPointerException" converter="exception"></convert>
</allow>
</dwr>
類DWRFilter代碼如下:
import java.lang.reflect.Method;
import org.directwebremoting.AjaxFilter;
import org.directwebremoting.AjaxFilterChain;
import org.directwebremoting.util.Logger;
public class DWRFilter implements AjaxFilter {
public Object doFilter(Object object, Method method, Object[] arr,
AjaxFilterChain chain) throws Exception {
//System.out.println("攔截目標方法:"+method.getName());
log.debug("攔截目標方法:"+method.getName());
Object obj=chain.doFilter(object, method, arr);
//System.out.println("目標方法"+method.getName()+"執行結束");
log.debug("目標方法"+method.getName()+"執行結束");
return obj;
}
private static final Logger log=Logger.getLogger(DWRFilter.class);
}
下面測試Dwr的異常處理:
UserService中有如下方法:
public List testException(List list)
{
System.out.println("測試EXCEPTION");
try {
list.get(0);
} catch (Exception e) {
throw new NullPointerException("空指針異常");
}
return list;
}
JavaScript里通過dwr.xml配置的UserService調用此方法,如果返回對象為null,則Dwr報空指針異常錯誤:
var list=new Array('abc');
UserService.testException(list,{
callback:function(data){alert("正常:"+data[0])},
exceptionHandler:function(message){alert("異常:"+message)}
})