我们有一个Flex应用程序通过BlazeDS与Java后端通信。
以前,如果发生SQL错误,SQL异常将在Flex应用程序中显示为警报,并且调用CallResponder的错误处理程序,通知用户出现了错误。
Flex代码:电话应答:
<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,在那里它被显示为警报,并调用CallResponder的错误处理程序。我们不一定希望异常显示为警报,但是调用错误处理程序是很好的,因为它通知用户出了问题。
现在(使用try-catch块),如果发生异常,则根据需要将异常输出到日志中,但不会调用CallResponder的错误处理程序。Flex认为服务成功返回了一个不正确的null
值。
是否有其他的方法来指示Flex调用不成功,应该调用错误处理程序,而不是删除try-catch块?
在它被记录到服务器端后重新抛出异常,它将像以前一样propergate到Flex前端。