我正在构建一个多语言应用程序,我正在存储cookie中使用的最新语言的值。
当用户打开应用程序时,未设置sessionScope变量,代码将查找cookie值并重新加载页面(如果不在适当的区域设置中)。
每次在适当的语言环境中重新加载页面时,我都会收到“com.ibm.xsp.acl.RedirectSignal”警告,我会尽量避免使用它。
我的代码位于我在应用程序中使用的ApplicationLayout控件的beforeRenderResponse事件中,如下所示:
if(!sessionScope.lang) { //this only happens when the page is opened in browser for the first time
var lang = context.getUrlParameter("lang").toLowerCase();
if(!!lang) {
sessionScope.lang = lang.toUpperCase();
//set cookie for next time the site is opened by user
setCookie("lang", lang.toUpperCase(), 30);
context.setLocale(new Locale(lang.toLowerCase()));
} else {
//set language from cookie
var lang = getLangFromCookie();
if(!!lang) {
sessionScope.lang = lang;
context.setLocale(new Locale(lang.toLowerCase()));
} else {
sessionScope.lang = Appconfig.defaultLang;
context.setLocale(new Locale(Appconfig.defaultLang.toLowerCase()));
}
}
//need to trpa the redirect error thrown here, as it is just a warning - avoid filling log with this
//importPackage(com.ibm.xsp.acl.RedirectSignal);
importPackage(com.ibm.xsp.acl.RedirectSignal);
try {
//reload the page so Locale value kicks in
context.reloadPage();
} catch (RedirectSignal rs) {
//just ignore
}
}
即使我添加了importPackage行,我在保存代码时仍会收到错误(它在脚本库中):
遇到“”rs“”在线...
我该如何做到这一点?
谢谢:D
答案 0 :(得分:2)
catch是Throwable,而不是RedirectSignal。这是我在handleException函数中使用的代码
try {
try {
if (t instanceof RedirectSignal) {
return;
}
if ("javax.faces.el.EvaluationException".equals(t.getClass().getName())) {
if (t.getCause() instanceof RedirectSignal) {
return;
}
}
} catch (Throwable e) {
// Error checking cause, skip
}
// Now log the error
} catch (Throwable e) {
e.printStackTrace();
}
答案 1 :(得分:1)
在SSJS中,您不必在catch块中定义异常的类型/类。由于您没有对"例外"做任何事情,因此也无需导入RedirectSignal类。
try {
context.reloadPage();
} catch ( redirectSignal ) {
// Ignore redirect signal "exception"
}