如何从JSTL /表达式语言中的JSON字符串中提取单个值?

时间:2017-11-06 11:31:35

标签: json cookies jstl el

我正在我的一个Web应用程序中实现多语言。用户选择的语言保存在cookie中。我已经能够通过这种方式从这个cookie中提取内容:

${cookie.userdata.value}

我遇到的问题是,语言不是我存储在此cookie中的唯一内容。用户上次访问通知时也有一些时间戳。 cookie的完整值采用JSON格式:

userdata={
          "notificationsViewed":1509696860036,
          "documentNotificationsViewed":1509696859896,
          "language":"en"
         }

我需要的只是"en"

在其他情况下,我使用javascript和JSONParser来获取语言,但我有一种情况,即能够使用JSTL / Expression Language获取语言会很棒,但我一直无法找到。到目前为止,我的尝试导致:

<c:set var="language">${cookie.userdata.value.language}</c:set>

javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'language'.

我需要以某种方式使用JSON方法,但我甚至不知道是否可能。有谁知道吗?

1 个答案:

答案 0 :(得分:1)

在我参与的项目中,我做了以下工作:

在java端,将语言设置为可以使用getter在JSP中访问的meber变量。

您可以使用您设置的cookie或任何其他方式(用户输入,请求标题,...)来执行此操作。

在JSP中获取该值并将其用于在呈现页面之前完成的任何本地化。

然后,作为呈现页面的一部分,包括本地化javascript数组:

...
    <script>
    var l10n = {
        "language" : "${language}"
    };
    </script>
</body>

通过这种方式,在页面hs渲染后,您可以访问l10n.language语言(在javascript中)

这或多或少是在另一种情况下,Wordpress如何处理javascript脚本的本地化。