xpages SSJS:无法摆脱日志中的“com.ibm.xsp.acl.RedirectSignal”警告

时间:2015-05-27 20:43:19

标签: xpages xpages-ssjs

我正在构建一个多语言应用程序,我正在存储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

2 个答案:

答案 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"
}