Using jsf2 (参见 maven dependencies)
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.10</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.10</version>
</dependency>
<dependency>
<groupId>com.sun.facelets</groupId>
<artifactId>jsf-facelets</artifactId>
<version>1.1.14</version>
</dependency>
我发现 ui:repeat 标签没有使用 jsf 的配置。如果我在 web 中重新定义分隔符字符.xml
<context-param>
<param-name>javax.faces.SEPARATOR_CHAR</param-name>
<param-value>_</param-value>
</context-param>
一个<ui:repeat>渲染一个:无论如何,这就是为什么我不能使用jquery在我的自定义组件中查找div的Id:
<a href="#" onclick="toggleDiv('#{cc.clientId}Div')">
<h:outputText value="#{cc.attrs.value}" />
</a>
<div id="#{cc.clientId}Div" style="display: none">...</div>
此组件的 HTML 结果为:
<a href="#" onclick="toggleDiv('j_idt12:0_j_idt18_0_j_idt24Div')">123456</a>
<div id="j_idt12:0_j_idt18_0_j_idt24Div" style="display: none">
...
</div>
如您所见,在 j_idt12:0_j... 中有一个 : 使 jquery 函数无效。我能做些什么呢?有没有办法设置一个特殊的 UI 分隔符字符?
至于jQuery的"问题",只需转义:
作为\:
或使用[id]
选择器即可。参见 如何使用 jQuery 选择 JSF 组件?顺便说一下,我宁愿使用固定 ID 而不是依赖 JSF 生成的 ID,否则您的 Web 应用程序非常不可移植。
至于<ui:repeat>
问题,对不起,我无法重现它。但是Facelets 1.x的依赖是非常可疑的。它可能只会与已经捆绑在JSF 2.x中的Facelets 2.x冲突,这反过来确实可以解释这个问题。完全摆脱 Facelets 1.x 依赖,当已经使用 JSF 2.x 时,您不需要它。