控制生成的ui ID:重复

时间:2017-01-07 15:35:08

标签: jsf facelets uirepeat clientid passthrough-elements

抱歉这个简单的问题。我正在学习使用JSF 2.2来创建一个表单并尽可能地使它接近普通的HTML5。我有一个ui:重复生成的列表,如下所示:

<ul id="nameLst">
    <ui:repeat var="d" value="#{controller.names}" varStatus="status">
        <li>
            <input
                jsf:id="nameTxt"
                jsf:binding="#{nameTxt}"
                jsf:value="#{d}"
                type="hidden" />#{d}
        </li>
    </ui:repeat>
</ul>

它呈现如下:

<ul id="nameLst">
    <li>
        <input id="j_idt14:0:nameTxt" name="j_idt14:0:nameTxt" value="Name1" type="hidden">
        Name1
    </li>
    <li>
        <input id="j_idt14:1:nameTxt" name="j_idt14:1:nameTxt" value="Name2" type="hidden">
        Name2
    </li>
</ul>

现在,我正在尝试仅使用JavaScript将名称添加到此列表中。问题是,我如何控制这个生成的id,所以我可以在JavaScript中使用它。主要是,如果列表开始为空,我如何生成此ID,以便可以正确地将其发回给托管bean。

1 个答案:

答案 0 :(得分:1)

  

如何控制此生成的ID,因此我可以在JavaScript

中使用它

只需给它一个固定的id

<ui:repeat id="names" ...>

或者,使用jsfc属性将<ul>变为<ui:repeat>

<ul id="names" jsfc="ui:repeat" value="#{bean.names}" var="name">
    <li>
        <input jsf:id="name" type="hidden" value="#{name}" />
    </li>
</ul>
  

主要是,如果列表开始为空,我该如何生成此ID,以便可以正确地将其发回给托管bean

使用JSF代替JS。可以在此处找到一个示例:How to dynamically add JSF components

另见: