在GWT / js重定向之后,request.setAttribute不起作用

时间:2014-03-18 16:02:31

标签: java jsp servlets gwt

在我的网站上,我选择的语言很少。我使用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发送attribiute:

request.setAttribute("locale1", locale);

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

的新网址
Window.Location.assign(Window.Location.createUrlBuilder()
    .setHost(newURL).buildString());

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

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

1 个答案:

答案 0 :(得分:0)

不是将语言环境作为每个重定向或新浏览器窗口的请求属性传递,而是使用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>