这是我的标记,我正在使用jtsl核心标记
<c:forEach var="attr" items="${attributes}">
<c:when test='${attr.controlType == "textField"}'>
<script>createTextField("${attr}");</script>
</c:when>
</c:forEach>
因此“属性”是驻留在模型中的对象列表。
我想调用createTextField函数,我想访问“attr” 在那个职能部门。
这是我的功能,但我无法访问该对象,说它未定义。
function createTextField(object) {
document.write(object.name);
}
有什么想法吗?将不胜感激。
答案 0 :(得分:4)
这不起作用。 Java和JavaScript不在同一环境中运行。您基本上是将attr.toString()
传递给JavaScript函数,该函数默认情况下看起来像com.example.ClassName@hashcode
。 JavaScript String
对象没有name
属性。
基本上有两种方法可以让它发挥作用:
您需要将#{attr}
表示的Java对象转换为符合JavaScript对象表示法的字符串(也称为JSON)。 E.g。
<script>createTextField(${attr.asJson});</script>
有类似的东西(Gson的帮助不大):
public String getAsJson() {
return new Gson().toJson(this);
}
您当然也可以使用StringBuilder
或其他东西手动构建它。 JSON格式并不那么难。
只传递感兴趣的属性/属性,只要它们可以表示为String
。 E.g。
<script>createTextField("${attr.name}");</script>
与
function createTextField(name) {
document.write(name);
}