2017-05-24 14 views
0

私はwebappでGoogle Chartsを使用しています。私のコントローラの内部では、データを保持するオブジェクトを渡します。このオブジェクトは、後でformatData()メソッドを使用してアクセスします。このメソッドは、Stringにフォーマットされたデータを返します。私はHTMLの内部でデータを挿入する方法Thymeleafを使用してJavaScriptチャートにデータを動的に挿入します。

"[ [new Date(2017,4,27), 116.42], [new Date(2017,4,26), 116.26], [new Date(2017,4,25), 116.05] ]" 

<script type="text/javascript" th:inline="javascript"> 
     /*<![CDATA[*/ 
     data.addRows([[${reco.formatData()}]]); 
     /*]]>*/ 
</script> 

しかし、2次元配列ではなく、通常の文字列としてそれを読み込むようThymeleafは、出力を解釈することはありませんつまり、このメソッドからの出力がどのように見えるかです。 HTMLSのソースコードでは以下のようになります。

data.addRows('[ [new Date(2017,4,27), 116.42], [new Date(2017,4,26), 116.26], [new Date(2017,4,25), 116.05] ]'); 

Beacuse引用符のコードが動作していない、私はそれらを取り除くために何をすべき?グラフにデータを挿入する方が良いかどうかを教えてください。 thymeleaf 3では

答えて

2

<script type="text/javascript" th:inline="javascript"> 
     /*<![CDATA[*/ 
     data.addRows(/*[(@{${reco.formatData()}})]*/); 
     /*]]>*/ 
</script> 
+0

残念ながら、それはうまくいきません。ソースコードは上記のコードと同じように見えます。 –

+0

ヒントをありがとう、私は古いThymeleaf 2バージョンがあったので動作していませんでした。更新後、あなたのコードは正常に動作しています。 –

+0

このコードのしくみを説明できますか? – holmis83

1

質問が既に(受け入れ)答えを持っていますが、ここでは異なる視点:

私はth:inline="javascript"が何をするかの誤解があると思います。式の結果を受け取り、のJavaScriptオブジェクトを(JSONは私が思うと具体的に)フォーマットします。メソッドがStringを返す場合は、JavaScriptコード内のStringでもあります。これは機能であり、バグではありません。

代替ソリューション:

  • は、Javaコードではなく、文字列から "正しい" タイプを返し

    。 JavaScriptで配列が必要な場合は、Javaコードから配列(またはList)を返します。

  • 文字列を傍受することなくそのまま挿入するには、th:inline="javascript"th:inline="text"に置き換えます。

関連する問題