在JavaScript中迭代来自支持bean的列表

时间:2011-12-27 11:26:34

标签: javascript jsf jsf-2 el

我有一个支持bean的对象列表 我想在JavaScript中迭代它, 所以我尝试了以下内容:

<script>
    //<![CDATA[
    var length = #{fn:length(myBean.myList)};

    for (i = 0; i <= length; i++) {
        var value = '#{myBean.myList[i].id}';
        var label = '#{myBean.myList[i].firstName}';
        alert(value);
        alert(label);
    }
    //]]>
</script>

我在控制台中没有错误,但它显示空警报。这是怎么造成的,我该如何解决?

2 个答案:

答案 0 :(得分:11)

首先需要将其转换为JS对象数组。如果id是数字,请按以下方式进行:

var users = [
  <ui:repeat value="#{bean.users}" var="user" varStatus="loop">
    { id: #{user.id}, firstName: "#{user.firstName}" }#{loop.last ? '' : ','}
  </ui:repeat>
];

for (var i = 0; i < users.length; i++) {
    var user = users[i];
    alert(user.id);
    alert(user.firstName);
}

如果用户名包含换行符(双引号已由JSF转义),则只会失败。考虑根据Escape JavaScript in Expression Language

显式转义JS

更好的方法是让JSF(或者最好是一些Web服务,例如JAX-RS,根据ajax请求)通过使用像JSON这样的JSON解析器/格式化器以Google Gson格式返回它,这样你就可以做到:

var users = #{bean.usersAsJson};

for (var i = 0; i < users.length; i++) {
    var user = users[i];
    alert(user.id);
    alert(user.firstName);
}

with(假设你正在使用Gson):

public String getUsersAsJson() {
    return new Gson().toJson(users);
}

另请注意,您应使用i < length而不是i <= length。另请注意,usersmyList更自我记录。

答案 1 :(得分:0)

我遇到了同样的错误,我通过使用解决了它  "&lt;"代替&lt;在for循环中