【问题标题】:Sending JSON text from Browser to JSF Managed Bean (Primefaces)将 JSON 文本从浏览器发送到 JSF 托管 Bean(Primefaces)
【发布时间】:2012-08-25 18:07:55
【问题描述】:

我正在开发一个应用程序,我正在考虑以 JSON 格式将信息发送回浏览器,并让 java 脚本根据信息呈现页面。以同样的方式,我想以 JSON 格式将更新从浏览器推送到托管 bean。我们可以在 JSF + Primefaces 中实现这一点吗?

我们考虑使用 JSON 的原因是为了限制来回传递的数据量。

【问题讨论】:

  • JSF 实现和库包含它们自己的 Ajax 机制。通常的文档没有指定内部细节。我不认为在混合中添加您自己的 JSON 例程是一个好主意。
  • 只需将 json 字符串放在 bean 的某个字符串变量中,然后将其放在页面中的某个 h:inputHidden 并从 js 访问它(您可以使用 f 渲染/执行 h:inputHidden: ajax 以便从/向服务器传输 json 字符串)
  • @Daniel 我关注了您的评论并能够将 JSON 数据作为字符串发送,该字符串出现在 http 响应中,每个双引号都有一个反斜杠。这使得很难从中解析。你能建议我如何解析响应数据吗?

标签: jquery json jsf primefaces


【解决方案1】:

我可以推荐使用 Gson Gson User Guide

这里是一个简短的例子,说明如何从服务器创建/发送/解析 json

在你的 bean 中做这样的事情

Gson gson = new Gson();
myJsonString = gson.toJson(someObjectOrListOfObjects);

在 xhtml 中

<h:inputHidden id="my_json_data" value="#{myBean.someObjectOrListOfObjects}" />

在你的 js 文件中

var data = $('input[id$="my_json_data"]').val();
data = jQuery.parseJSON(data); //to parse it, use dev tools/fire bug to add data variable to watch and observe it

【讨论】:

    【解决方案2】:

    我建议使用其他一些方法来最小化正在发送的数据,而不是滚动您自己的传递 JSON 而不是 XML/HTML 的 JSF 实现。

    使对话框、选项卡视图、数据表等动态化。

    PrimeFaces 可以选择使某些元素动态化。这意味着它们会在用户请求这些内容时加载。这可以提高页面加载量。

    使用较小的表格

    我看到很多用户只使用一个&lt;h:form&gt;,因为如果所有内容都在一个表单中,您就不能忘记在需要一个表单的元素周围放置一个表单。这是完全错误的,并导致在表单中发布所有内容,而不仅仅是页面的相关部分。在需要的地方使用表单,并仔细检查发送的内容,例如 firebug。

    使用客户端验证

    使用客户端验证来防止用户发送错误输入。这样就不会(永远)来回发送错误的数据。一个很好的副作用是用户会收到一个快速的“响应”。注意:这并不意味着您可以放弃服务器端验证。出于安全目的,需要服务器端验证。

    【讨论】:

    • 这是“代替”而不是“代替”:)。顺便说一句,这些都是很好的建议,但你的答案中的 JSON 处理在哪里?
    • @Luiggi-Mendoza 感谢“替代”更正。 ;-) 我建议 OP 反对 JSON 的想法。相反,我提供了一些替代方案来限制数据流量。
    • @LuiggiMendoza 感谢您的回复。它们都是很好的输入,我也在研究这些东西。我仍然想知道是否有一种方法可以使用 JSF 框架但仍然传递 JSON 文本。
    • @user1624890 如果您想发送/检索 JSON 消息,请遵循 Daniel 在他对您的问题的评论中的建议。
    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 2013-07-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多