RedQueryBuilder を使用して、Web アプリケーションにテーブル フィルターを実装しています。ユーザーが [フィルターの適用] ボタンをクリックすると、現在の SQL とパラメーターがバックエンド アプリケーションに送信され、ページが更新されます。sql と params を RQB に読み込んで、適用されたフィルターを表示します。
場合によっては、ユーザーは、RQB が読み戻せないフィルターを指定できます。たとえば、整数フィールドに空のパラメーターが含まれている場合などです。これで、クライアント側の検証も実行できるようになりましたが、最初のステップとして、問題が発生した場合に正常に回復できるようにしたいと考えています。ただし、以下は実際にはエラーをトラップしません。
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 を使用して実行される関数にラップされています。
この種のエラーをトラップする方法はありますか?