当前位置: 首页 > 知识库问答 >
问题:

使用Thymeleaf插入Javascript片段包含双引号

鲁峰
2023-03-14

我试图在Thymeleaf模板中动态创建Javascript,以便使用GoogleChart的Timeline包(注意:Google库的Spring版本中没有这个包)。

我有一个胸腺素片段的值。包含以下代码的html,然后将其包含在实际页面中:

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" th:inline="javascript">
/*<![CDATA[*/

  google.charts.load('current', {'packages':['timeline']});
  google.charts.setOnLoadCallback(drawChart);
  function drawChart() {
    var container = document.getElementById('timeline');
    var chart = new google.visualization.Timeline(container);
    var dataTable = new google.visualization.DataTable();

    dataTable.addColumn({ type: 'string', id: 'Card' });
    dataTable.addColumn({ type: 'date', id: 'Start' });
    dataTable.addColumn({ type: 'date', id: 'End' });
    dataTable.addRows([ /*[[${Parms}]]*/ ]);

    chart.draw(dataTable);
  }

/*]]>*/
</script>

在我的GantController类中,我有以下代码:

字符串参数=“['MegaCorp应用程序1',新日期(2018,7,2),新日期(2019,4,9)]”;模型put(“Parms”,Parms);

(模型类型为Map)。

这是接近工作,但生成的输出(最终页面源)是:

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
/*<![CDATA[*/

  google.charts.load('current', {'packages':['timeline']});
  google.charts.setOnLoadCallback(drawChart);
  function drawChart() {
    var container = document.getElementById('timeline');
    var chart = new google.visualization.Timeline(container);
    var dataTable = new google.visualization.DataTable();

    dataTable.addColumn({ type: 'string', id: 'Card' });
    dataTable.addColumn({ type: 'date', id: 'Start' });
    dataTable.addColumn({ type: 'date', id: 'End' });
    dataTable.addRows([ "[ 'MegaCorp App 1', new Date(2018, 7, 2), new Date(2019, 4, 9) ]"]);

    chart.draw(dataTable);
  }

/*]]>*/
</script>

问题:

如何消除dataTable.addRows方法调用中插入文本前后的附加双引号(“),以使此代码正常工作?

谢谢

共有1个答案

史景铄
2023-03-14

胸腺叶不是被设计成那样使用的。您不应该向模型添加JSON字符串。你应该做的是添加java对象,以同样的方式输出。在您的情况下:

model.put("parms", new Object[] {new String[] {"MegaCorp App 1", "2018-07-02", "2018-04-09"}});

然后在javascript中:

<script type="text/javascript" th:inline="javascript">
.
.
.
var rows = /*[[${parms}]]*/ null;
rows[0][1] = new Date(rows[0][1]);
rows[0][2] = new Date(rows[0][2]);
dataTable.addRows(rows);
.
.
.
</script>
 类似资料:
  • 是否有一种方法可以检查堆栈中的前一个片段是否是包含SupportMap的片段?

  • 我正在尝试用Thymeleaf创建纯文本和HTML的电子邮件模板。因为我不想复制公共部分,所以我想单独定义这些部分,并将它们插入到更具体的模板中。 它适用于超文本标记语言,但对于普通文本变量中的公共部分不被替换: 超文本标记语言 > 具体的html 纯文本 > header.txt 页脚。文本 具体的文本 后果 对于超文本标记语言,这一切都很好,但是对于纯文本版本,插入的模板中的变量不会被替换:

  • 我正在尝试使用Thymeleaf呈现电子邮件模板,我希望主题和正文在同一个文件中,但分别呈现。我不想使用spring视图,只想使用普通的。 这有几个问题 首先,我无法获取Thymeleaf仅渲染

  • 我有一个活动,它包含一个片段容器(FrameLayout),我在Activity.onCreate()期间在其中放置了一个片段。片段包含一个包含一串片段的ViewPager。所有这些工作都很好。页面内容显示,我可以很好地在页面中滑动,甚至可以看到操作栏中的操作,因为贡献的页面变得可见。 现在我用另一个片段替换包含ViewPager的片段: 此外,我已经用FragmentPagerAdapter替换

  • 我有一个带表单的thymeleaf代码片段。我想验证这张表格。 这里有个例外: ${#fields.haserrors('name')} 那么我如何将name param放入引号中呢?

  • 我有一个第三方包。我不能以任何方式修改。包包含以下类: 如果我从的包调用此方法,它将失败,因为不在包的类路径上。 我可以简单地添加一个片段来修改bundle的类路径吗?还是这种依赖关系只适用于片段内的类? 长话短说:当在主机包的类中执行时,OSGi中的的语义是什么?是否包括: 问:捆绑类?A:是的。 问:片段中包含的类?A:是的。来源 问:导入的包和从所需包导出的包?A:是的。 问:导入的包裹和导