ui重复分隔符char

时间:2012-06-27 15:47:23

标签: jsf-2 uirepeat

使用jsf2(参见 maven依赖

    <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

中重新定义分隔符char
<context-param>
    <param-name>javax.faces.SEPARATOR_CHAR</param-name>
    <param-value>_</param-value>
</context-param>

&lt; ui:repeat&gt; 无论如何渲染,这就是为什么我不能使用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分隔符char?

1 个答案:

答案 0 :(得分:3)

关于jQuery“问题”,只需将:转义为\\:或使用[id]选择器。另请参阅How to select JSF components using jQuery?顺便说一句,我宁愿使用固定ID而不是依赖于JSF生成的ID,否则您的webapp非常难以移植。

对于<ui:repeat>问题,对不起,我无法重现它。但Facelets 1.x的依赖性非常可疑。它可能只与已经捆绑在JSF 2.x中的Facelets 2.x冲突,而这反过来可以解释这个问题。完全摆脱Facelets 1.x依赖关系,在使用JSF 2.x时不需要它。