我知道如何pass variables from JSF to Javascript,我通常在我的xhtml中将它们嵌入:
<script>
$(document).ready(function () {
setData('#myid', '#{dataController.items}');
});
</script>
我不完全喜欢的是,我用Java编码JS库所需的特定格式,因此它看起来不是非常优雅/可扩展。例如,我从我的数据库中获取Map<String, Integer>
,然后在Java中编码JS所需的数据,如f.ex。:
for...
String s += "["+ ... +"," + ... + "]";
这时我需要传递类似[val1,val2], [val3, val4]...
的内容,之后我会以正确的格式一次性粘贴JSON:
'data': {
'values': [formattedVarFromJSF],
但有时我需要使用非常不同的布局,例如:
'data':
{"values":[var1FromJSF]},
{"values":[var2FromJSF]},
...
我在JSF中编写了我不喜欢的整个{"values":[ + var(i) + ]}
,因为更改库意味着我需要更改我的Java代码。
我也可以使用与JSON格式相同的Java Map对象并打印它,但这似乎有点耦合。
我能找到的最好方法是将JSF与JS映射隔离,并使用它来检索数据,方法是在xhtml中打印这样的地图:
<script>
var kvArray = [
<c:forEach items="#{dataController.map}" var="m">
{key: #{m.key}, value: #{m.value}},
</c...>
];
</script>
然后让JS处理它,根据库或函数的具体情况进行映射。
有没有更有效和优雅的方法来解决这个问题?这方面的最佳做法是什么?