在javascript函数中通过EL访问模型对象?

时间:2012-01-31 19:24:32

标签: javascript model-view-controller jsp jstl

这是我的标记,我正在使用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);        
}

有什么想法吗?将不胜感激。

1 个答案:

答案 0 :(得分:4)

这不起作用。 Java和JavaScript不在同一环境中运行。您基本上是将attr.toString()传递给JavaScript函数,该函数默认情况下看起来像com.example.ClassName@hashcode。 JavaScript String对象没有name属性。

基本上有两种方法可以让它发挥作用:

  1. 您需要将#{attr}表示的Java对象转换为符合JavaScript对象表示法的字符串(也称为JSON)。 E.g。

    <script>createTextField(${attr.asJson});</script>
    

    有类似的东西(Gson的帮助不大):

    public String getAsJson() {
        return new Gson().toJson(this);
    }
    

    您当然也可以使用StringBuilder或其他东西手动构建它。 JSON格式并不那么难。

  2. 只传递感兴趣的属性/属性,只要它们可以表示为String。 E.g。

    <script>createTextField("${attr.name}");</script>
    

    function createTextField(name) {
        document.write(name);        
    }