【发布时间】:2020-05-25 14:27:06
【问题描述】:
我想将 jsf 文件中的对象列表(示例中为 list_A)传递给 javascript 中的函数。 问题是调用 event.name="#{controllerManagedBean.list_A.get(y).getName()}";为 event.name 分配值,就好像“y”始终具有值 0,即列表中的第一项。
如何浏览列表并将所有名称传递给 list_1(如果可能,不使用 json)?
谢谢!!
这是我的代码(我认为重要的是脚本):
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<script src="visJS/dist/vis.js"></script>
<link href="visJS/dist/vis-timeline-graph2d.min.css" rel="stylesheet" type="text/css" />
</h:head>
<h:body>
<h:form>
<h:dataTable value="#{controllerManagedBean.list_A}"
var="evento" border="2"
cellspacing="1" cellpadding="1">
<h:column>
<f:facet name="header">Evento</f:facet>
#{evento.nombre}
</h:column>
</h:dataTable>
</h:form>
<div id="timeline">Prueba</div>
<script src="js/timeline.js"></script>
<script>
var x = parseInt('#{controllerManagedBean.list_A.size()}');
var list_1 = new Array();
//<![CDATA[
for(var y = 0; y<x; y++){
//]]>
var evento = new Object();
evento.nombre = "#{controllerManagedBean.list_A.get(y).getNombre()}";
list_1.push(evento);
}
myFunction(list_1);
</script>
</h:body>
</html>
【问题讨论】:
-
请参阅this 问题。您必须在 jsf 中将其转换为字符串,然后在 js 中将其转换回来。所以使用json、xml或者自定义转换是唯一的可能
-
@fuggerjaki61:不,你没有。一个 ui:repeat 可以作为您提到的链接并没有说转换和转换回来(请参阅stackoverflow.com/questions/2547814)。问题是没有将事物作为字符串传递(周围有单引号)。在这种情况下,OP thinking/假设
"#{controllerManagedBean.list_A.get(y).getNombre()}"在循环中每次都被评估,但它不是。它被评估一次。 OP 可以使用 ui:repeat 使用 EL 和 javascript 轻松构建所需的列表,如本评论中的链接所示,然后遍历该列表。 -
这能回答你的问题吗? Mixing JSF EL in a JavaScript file
-
@pgsanchez 向您展示更多问题:循环
for(var y = 0;在浏览器中执行。所有像#{controllerManagedBean.list_A.get(y)这样的EL 表达式都在服务器端在 页面被传递到浏览器之前执行。你看,这个EL中的y不能有合法的价值。 -
我知道,@djmj。正如你所说,在我的代码中,变量名更有意义,但用的是西班牙语。所以我虽然在这里将列表命名为 list_1 而不是 listaRepostajes 可能更容易。不过谢谢你的建议!
标签: javascript jsf arraylist