我正在使用 RedQueryBuilder 在 Web 应用程序上实现表过滤器。当用户单击应用过滤器按钮时,当前的 sql 和参数被发送到后端应用程序,并且页面刷新。我将 sql 和参数读入 RQB,以便显示应用的过滤器。
在某些情况下,用户可以指定一个 RQB 不喜欢回读的过滤器 - 例如,如果他们为 Integer 字段包含一个空参数。现在我也可以做一些客户端验证,但我真的希望第一步能够在出现问题时优雅地恢复。但是,以下内容实际上并没有捕获错误:
try {
RedQueryBuilderFactory.create(rq, filter.initial_query, filter.initial_params);
} catch(err) {
//
// There is a problem with the filter. Replace it with default values.
//
filter.initial_query = "SELECT * FROM \"<%=cleanTableName%>\" WHERE (\""+default_column+"\" = ?)";
filter.initial_params = [];
RedQueryBuilderFactory.create(rq, filter.initial_query, filter.initial_params);
//
// Explain the error to the user
//
$("#filter-message").innerText("There was a problem interpreting your filter; this is usually caused by using an empty value or text for filtering a number field. Click Clear Filter to reset the view and try again.")
}
相反,当使用格式错误的查询加载页面时,我在控制台中看到“Uncaught java.lang.ClassCastException”。
但是,如果我在控制台中尝试此操作,我会按预期捕获异常。
注意我上面的 RQB 代码被包装在一个使用 Deferred 执行的函数中。
知道如何捕获这些错误吗?