我们有一个通过 BlazeDS 与 Java 后端通信的 Flex 应用程序。
以前,如果发生 SQL 错误,则 SQL 异常将在 Flex 应用程序中显示为警报,并调用 CallResponder 的故障处理程序,通知用户出现问题。
弹性代码:呼叫响应者:
<s:CallResponder id="loginResult" result="loginResult_resultHandler(event)" fault="displayGenericErrorMessage(event)"/>
致电服务:
var authenticationMessage:String = loginResult.lastResult as String;
旧 Java 代码:
Map resultSet = simpleJdbcCall.execute();
ArrayList list = (ArrayList) resultSet.get("RESULT_SET");
现在,从上面的代码可以看出,SQL 执行语句不在 try-catch 块内(编码错误)。这实际上不会造成太大的麻烦,但我们希望能够将异常打印到错误日志中,并且无论如何将执行语句放在 try-catch 块中是正确的。于是,代码变成了这样:
新的 Java 代码:
ArrayList list = new ArrayList();
try {
Map resultSet = simpleJdbcCall.execute();
list = (ArrayList) resultSet.get("RESULT_SET");
}
catch (Exception e) {
logger.error(e.getMessage());
}
之前(没有 try-catch 块),如果发生异常,异常的消息会被传递回 Flex,在 Flex 中显示为警报并调用 CallResponder 的故障处理程序。我们不一定希望将异常显示为警报,但调用故障处理程序很好,因为它会通知用户出现问题。
现在(使用 try-catch 块),如果发生异常,则会根据需要将异常输出到日志中,但不会调用 CallResponder 的故障处理程序。Flex 认为服务成功返回,但null
值不正确。
除了删除 try-catch 块之外,还有其他方法可以向 Flex 指示调用不成功并且应该调用故障处理程序?
提前致谢。