我有一个支持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>
我在控制台中没有错误,但它显示空警报。这是怎么造成的,我该如何解决?
答案 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
。另请注意,users
比myList
更自我记录。
答案 1 :(得分:0)
我遇到了同样的错误,我通过使用解决了它
"<"
代替&lt;在for循环中