【发布时间】:2012-11-07 15:36:06
【问题描述】:
我有一个 jQuery 库,希望您将 JavaScript 对象作为选项传递给它。例如,这有效:
//Hardcoded JavaScript object
var myData = { "A" : "1", "B" : "2", "C" : "3" };
//Call to jQuery with object as an option
$("#mySelectorId").myJqueryFunction({values: myData});
我需要myData 对象不要像那样硬连线。
我可以在我的 Java 代码中轻松获取“A 到 1,B 到 2,C 到 3”结构,将其放入 Map(或其他对象)中,然后通过 @987654324 将其添加到请求中@。我只是不确定如何将 Map (等)转换为所需的 JavaScript 对象。这是我尝试过的。
//Java
Map<String, String> myMap = new TreeMap<String, String>();
map.put("A", "1");
map.put("B", "2");
map.put("C", "3");
request.setAttribute("myMap", myMap);
//JSP
<c:set var="myData" value="{" />
<c:forEach var="mapEntry" items="${myMap}" varStatus="counter">
<c:set var="myData" value="${myData}'${mapEntry.key}' : '${mapEntry.value}'" />
<c:if test="${counter.count < fn:length(myMap)}">
<c:set var="myData" value="${myData}, " />
</c:if>
</c:forEach>
<c:set var="myData" value="${myData}}" />
<script>
var myData = '${myData}';
$("#mySelectorId").myJqueryFunction({values: myData});
</script>
这一直有效,直到 myJqueryFunction 达到它尝试执行以下操作的程度:
var i = values[code];
本质上,它试图引用对象上的特定变量(例如,试图获取“B”的值,即 2)。注意code是一个保存A/B/C值的函数参数。
我尝试过在${mapEntry.key} 周围加上或不包含引号之类的东西,但似乎没有任何效果。
有谁知道如何让它工作?
【问题讨论】:
-
var myData = '${myData}';行后面的 myData 包含什么?myData是否包含字符串或对象?我对 JSP 了解不多,但看起来您可能正在为其分配一个字符串。 -
它包含
{'A' : '1', 'B' : '2', 'C' : '3'}。通过alert(myData);电话验证。这个问题的真正问题是 JSP 变量是否被正确转换为 JavaScript OBJECT。 -
如果
alert显示了这一点而不是[object Object],那么myData是一个字符串。 -
是的。因此问题。如何做到这一点。
-
JSP 是否需要单引号?如,
var myData = ${myData};有效吗?在 JavaScript 中,单引号也表示字符串,因此您实际上是在引用您的对象。
标签: java javascript jsp request