Sam*_*hat 5 javascript jsf el jsf-2
我有一个支持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>
Run Code Online (Sandbox Code Playgroud)
我在控制台中没有错误,但它显示空警报.这是怎么造成的,我该如何解决?
Bal*_*usC 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);
}
Run Code Online (Sandbox Code Playgroud)
只有当用户名包含换行符时才会失败(双引号已被JSF转义).考虑根据表达式语言中的Escape JavaScript显式转义JS
更好的方法是让JSF(或者最好是一些web服务,例如JAX-RS,根据ajax请求)通过使用像Google Gson这样的JSON解析器/格式化器以JSON格式返回它,这样你就可以:
var users = #{bean.usersAsJson};
for (var i = 0; i < users.length; i++) {
var user = users[i];
alert(user.id);
alert(user.firstName);
}
Run Code Online (Sandbox Code Playgroud)
(假设您正在使用Gson):
public String getUsersAsJson() {
return new Gson().toJson(users);
}
Run Code Online (Sandbox Code Playgroud)
另请注意,你应该使用i < length没有i <= length.还请注意,这users比自我记录更多myList.
| 归档时间: |
|
| 查看次数: |
8662 次 |
| 最近记录: |