【问题标题】:after GWT/js redirect, request.setAttribute does't workGWT/js 重定向后,request.setAttribute 不起作用
【发布时间】:2014-03-18 16:02:30
【问题描述】:

在我的网站中,我可以选择的语言很少。我使用 servlet、jsp 来查看,并将 GWT 作为本地化按钮操作的地方(将其视为 js)。在 servlet 中,我正在捕获子域,它是 en、de、fr 等语言(例如 en.mydomain.com 将给出字符串“en”)。 因为我使用 GWT,所以我必须使用从子域获得的当前语言环境向 jsp 发送参数。 jsp参数代码如下所示

<meta name="gwt:property" content="locale=<%=request.getAttribute( "locale1" )%>">

和servlet发送属性:

request.setAttribute("locale1", locale);

但在我的网站(GWT 层)中,您只需按下带有标志的按钮即可更改语言。那里会发生什么?我将子域从一种语言替换为另一种语言。 推送后,我将网址重定向到带有新子域的新网址

Window.Location.assign(Window.Location.createUrlBuilder()
    .setHost(newURL).buildString());

在上述操作之后 url 是正确的,然后该操作进入 servlet,我从正确的子域获取语言(获取新的语言)并尝试像上面的代码一样设置属性。 但是在jsp locale 中是不会被替换的。只是以前的语言仍然存在。无论我执行多少次该操作,jsp 都不会替换语言环境(意思是 en de fr ...)

问题:为什么会发生以及如何解决?

【问题讨论】:

    标签: java jsp servlets gwt


    【解决方案1】:

    与其将语言环境作为请求属性传递给每个重定向或新浏览器窗口,不如尝试使用locale 作为查询字符串或两者结合使用。它可能会解决这个问题。

    在每个jsp 页面中添加以下脚本。

    <script>
        var search = location.search;
        if (search.indexOf("locale") == -1) {
            var lang = navigator.language != null ? navigator.language
                    : navigator.browserLanguage;
            var lang = lang.replace("-", "_");
            document.write("<meta name='gwt:property' content='locale="+lang +"'>");
        }
    </script>
    

    【讨论】:

    • 我们将语言环境作为子域,因此查询中的语言环境将是多余的
    • 我没有测试它,因为我必须编写很多代码来测试它。就试一试吧。它可能会起作用。
    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2013-07-05
    • 2015-09-15
    相关资源
    最近更新 更多