dorado7 updateAction 異常捕獲

使用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的。


                           
                      

                                   













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章