控制ui:repeat生成的ID

3

很抱歉这个问题比较简单。我正在学习使用JSF 2.2创建表单,并尽可能保持接近普通HTML5的形式。我有一个ui:repeat生成的列表,如下所示:

<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个回答

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。可以在此处找到示例:如何动态添加 JSF 组件

另请参阅:


首先,非常感谢您的帮助。关于列表可能为空的部分,您建议使用JSF,但是这样做的话,为了更新列表,我每次都需要调用后端bean。我真的很想在用户完成添加和删除项目后再提交列表。由于现在我有了id,我可以使用JS创建与ui:repeat生成的li条目完全相同的条目,但是新条目似乎没有被提交到后端bean。它们应该被提交吗?还是除了使用nameList:0:name、nameList:1:name等方式创建id之外还有其他问题? - undefined
正因为这个原因,你需要通过JSF来完成。参见https://dev59.com/2W855IYBdhLWcg3wUCWC - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接