解析XPages/JSF ID时,为什么有时会附加:0?

解析XPages/JSF ID时,为什么有时会附加:0?,jsf,xpages,Jsf,Xpages,我使用表达式语言为客户端Javascript函数提供特定DIV的ID。我使用以下方法: "#{id:repeatsecondlevelnodes}" 首先,我根本不确定解析器如何找到“真实”ID。我假设它类似于CSS选择器,但我无法找到关于它的权威文档。我非常感谢任何类型的文档链接 第二,我不明白为什么有时解析的值会用:0来后置 有时候我会 view:_id1:repeatfirstlevelnodes:1:repeatsecondlevelnodes:0 当我怀孕的时候 view:_id1

我使用表达式语言为客户端Javascript函数提供特定DIV的ID。我使用以下方法:

"#{id:repeatsecondlevelnodes}"
首先,我根本不确定解析器如何找到“真实”ID。我假设它类似于CSS选择器,但我无法找到关于它的权威文档。我非常感谢任何类型的文档链接

第二,我不明白为什么有时解析的值会用:0来后置

有时候我会

view:_id1:repeatfirstlevelnodes:1:repeatsecondlevelnodes:0
当我怀孕的时候

view:_id1:repeatfirstlevelnodes:1:repeatsecondlevelnodes
我不明白是什么造成了这种差异。到目前为止,我只是通过删除:0来破解它,如果我遇到它,但我更想了解解析器实际上是如何工作的

“#{id:…}”
是一个特殊表达式,用于获取XPage控件id的呈现客户端id。它在服务器端执行。服务器知道呈现的客户端元素将获得什么id

例如:

在XPage中定义的CSJS代码

var element = document.getElementByID("#{id:repeatsecondlevelnodes}")
在将其发送到客户端之前,服务器将对其进行修改

var element = document.getElementByID("view:_id1:repeatfirstlevelnodes:0:repeatsecondlevelnodes") 
这将始终起作用,因为服务器知道确切的客户端ID


不要试图自己计算客户机ID,因为当您在XPage中更改某些内容时,它们可能会更改。只需信任
“#{id:…}”
表达式。

它是附加的,而不是前置的,请不要在屏幕截图中发布代码。第三,发布xhtml/xpage的相关源代码。简短回答:如果您有迭代组件,如datatable、ui:repeat或similar@Kukeltje:通常,它们的索引不会在链的最后一个位置结束。安德鲁:这里有一些值得思考的东西,也就是说,你似乎在滥用身份证,最终还是为了同一件普通的事情。@BalusC:是的,忘了这件事了…@Kukeltje:谢谢你的评论。我不想手动生成这些ID。我只是不明白为什么屏幕截图中显示了“#{id:RepeatFourthLevel Nodes}”,解析为“_id1:repeatfirstlevelnodes:0:repeatsecondlevelnodes:0:repeatthirdlevelnodes:0:repeatfourthlevelnodes:0”而不是“_id1:repeatfirstlevelnodes:0:repeatthirdlevelnodes:0:repeatfourthlevelnodes:0”,谢谢您的回答。我的用例稍微复杂一点;CSJS的语法是动态生成的(它是一系列嵌套重复控件的一部分)。与此链接:。不过,我不明白的是,为什么有时CalculateId后面会附加一个:0。我正在试图理解导致:0的原因,并避免它,我不想自己计算id。我理解。虽然,“到目前为止,我只是通过删除:0”来破解它,但在我听来就像是在计算客户端id;-)更糟糕的是,这是对bug的对症治疗,我讨厌别人的代码,当我不得不自己做的时候,它真的让我讨厌!您是否获得了与
{javascript:getClientId(“repeatsecondlevelnodes”)}
相同的错误客户端id“…:0”?现在我似乎无法重现此效果。。。该死