【问题标题】:How can I extract a single value, from a JSON String, in JSTL / Expression Language?如何在 JSTL / 表达式语言中从 JSON 字符串中提取单个值?
【发布时间】:2017-11-06 11:31:35
【问题描述】:

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

${cookie.userdata.value}

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

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

我需要的只是"en"

在其他情况下,我使用 javascript 和 JSONParser 来获取语言,但我有一种情况,如果能够使用 JSTL / 表达式语言获取语言会很棒,但我一直找不到。到目前为止,我的尝试导致:

<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 方法,但我什至不知道这是否可能。有人知道吗?

【问题讨论】:

  • 您想在 javascript 或 java (jsp) 中何处使用该语言指示符 JSTL/EL 将在页面呈现期间工作,javascript 一旦在客户端浏览器中呈现?
  • 在大多数情况下,它在使用 javascript 时有效。但是,正如您在渲染页面时所说的那样,一些旧代码会更容易使用。
  • 在下面查看我的答案。我在那里解决了这两种情况。

标签: json cookies jstl el


【解决方案1】:

在我从事的一个项目中,我做了以下工作:

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

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

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

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

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

这样,页面渲染完成后,您可以访问语言为l10n.language(在javascript中)

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

【讨论】:

  • 好吧,这行得通。不完全像我预期的那样,但即使它是解决我的问题的方法,它也是一个很好的方法,并且可以针对任何类似情况普遍实施。谢谢。
  • ...现在已完全实现,包括翻译和一切。再次感谢
猜你喜欢
  • 1970-01-01
  • 2013-12-10
  • 2019-09-03
  • 1970-01-01
  • 2023-03-20
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多