我是 Eclipse 中的 BIRT 新手。我需要将对象从 BIRT 端传递到 HTML 动态文本(在布局中)
数据集的onFetch
json = {Name: row["Name"],
Lastname: row["Lastname"],
Date: row["Date"]};
数据集关闭之前
reportContext.setPersistentGlobalVariable("json", json);
以及布局中的动态文本
var str = <value-of>reportContext.getPersistentGlobalVariable("json")</value-of>;
我遇到错误未捕获的语法错误:意外的标识符
var str = [object Object];
有人能指出我正确的方向吗?知道如何在 Birt Report 和 JavaScript(HTML) 之间传递对象吗? 提前致谢!
最佳答案
您应该解释您想要实现的目标。 为什么您认为需要“将对象传递给 HTML 动态文本”?
BIRT 中有两种类型的动态文本项,您似乎将它们混合在一起:
动态文本项:您将值指定为 Javascript 表达式,例如如果您的数据集具有 NAME 列,则为“Hello world”或“Hello ” + row["NAME"]。
文本项:您将值指定为 HTML,例如 Hello World ,或你好行[“NAME”]。
这类似于 Java Servlet 与 Java Server Pages,两者可以做相同的事情,但以不同的方式。
这两者都要求您的布局元素可以访问数据集中的数据。这通常是通过将布局元素放置在绑定(bind)到数据集的表项或列表项中来完成的(请参阅属性中的“绑定(bind)”选项卡)。
为了简单起见,我建议忘记“文本项”并始终使用“动态文本项”。
你的语法 var str = ...;是一种不起作用的语法混合物。
在“动态文本项”内,您可能是指
reportContext.getPersistentGlobalVariable("json")
这不会给你一个语法错误,因为它是一个有效的 JavaScript 表达式。
但它不会像你想象的那样工作。 它会尝试将 JS 对象渲染为文本,结果可能是“[object Object]”。
请注意,BIRT 中的脚本编写发生在 BIRT 内部,而不是在浏览器中。
您真的想(使用 BIRT)生成一个包含 Javascript 的 HTML 页面,并在浏览器中执行该 Javascript 吗?
从未尝试过这个,但应该是可能的:
确保将“动态文本项”的类型设置为 HTML 并使用如下表达式:
("<script type=\"text/javascript\">\n" +
"alert('Hello world');\n" +
"</script>\n"
)
或动态内容:
("<script type=\"text/javascript\">\n" +
"alert('Hello " + row["NAME"] + "');\n" +
"</script>\n"
)
但这变得复杂:
要以这种方式传递 JSON 对象(而不是像 row["NAME"] 这样的简单字符串),您需要编写将 JSON 内容写入为 Javascript 源文本的代码。
关于javascript - 如何将 Birt Report 中的对象传递给 HTML 动态文本(布局),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62042478/