dorado7 updateAction 异常捕获

本文探讨了在Dorado框架中使用updateAction时遇到异常的两种处理方法:通过消息对象反馈和直接抛出异常。并详细分析了每种方法的具体实现及可能遇到的问题,最后给出了针对第二种方法中arg.error为undefined问题的解决方案。

使用updateAction时,如果后台还存在业务验证会抛出异常时,updateAction中到底要如何处理呢?

我不知道别人是如何处理的,但是按照我以往的经验,一般按照2种方式:

1:使用消息对象, 也就是说整个请求还是代表成功(触发onSuccess),但是返回的对象中存在有消息对象,再进行一次验证 ……其它处理……。

2:后台直接抛出异常,请求失败(触发onFailure),……其它处理……。


讲了方法,再就讲碰到的问题了。

当使用第一种方法的时候,如果你提交的数据中存在子数据(!DIRTY_TREE)。提交返回的信息为未成功,但是对象的状态已经被改变了。

第2次提交时就不会再提交上次已经提交过本次未改变的数据。   这个问题我还没解决,所以我就采用了第2种方式。


使用第二种方法,你会碰到:

                               arg.error 对象为undefined,也就是无法获得异常对象。

                               arg.processDefault=false;的情况下,还会弹出 ‘异常’ 的提示框。

过程就跳过,查看源码发现:

                                 arg.error ,根本就没有创建这个属性,异常在 updateAction更底层被内部捕获:

		    result.text = unescape(exceptionEl.text());
                    if (exceptionEl.attr("type") == "runnable") {
                        result._parseRunnableException(result.text);
                    } else {
                        result._setException(result._parseException(result.text, batchResult._connObj));
                    }
                             所以 arg.processDefault 也没办法阻止。

解决办法也在这段代码上     (exceptionEl.attr("type") == "runnable" ,   源码 com.bstek.dorado.view.resolver.ViewServiceResolver

					try {
						// processTask(escapeWriter, objectNode, context);
						processTask(writer, objectNode, context);
						writer.append("\n]]></response>\n");
					} catch (Exception e) {
						Throwable t = e;
						while (t.getCause() != null) {
							t = t.getCause();
						}

						writer.append("\n]]></response>\n");
						if (t instanceof ClientRunnableException) {
							writer.append("<exception type=\"runnable\"><![CDATA[");
							writer.append(((ClientRunnableException) t)
									.getScript());
						} else {
							writer.append("<exception><![CDATA[\n");
							outputException(jsonBuilder, e);
						}
						writer.append("\n]]></exception>\n");
						logger.error(e, e);
					}
					writer.append("</request>\n");
				}

一切都已经清楚,如果直接抛出异常的话,使用 ClientRunnableException,这个是可以执行script的。


                           
                      

                                   













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值