0

我尝试了以下代码:

 <ui:repeat var="item" id="request" value="#{myBean.requestList}">
    <h:selectBooleanCheckBox id="#{item.name}" value="#{item.type}"/>
    <h:outputText value="#{item.name}"/>
</ui:repeat>

我也试过

 <ui:repeat var="item" id="request" value="#{myBean.requestList}">
        <ui:param name="dynamicVal" value="#{item.name}"/>
        <h:selectBooleanCheckBox id="#{dynamicValue}" value="#{item.type}"/>
        <h:outputText value="#{item.name}"/>
  </ui:repeat>

这两个都给出错误:

java.lang.IllegalArgumentException: component identifier must not be a xero-length String at javax.faces.component.UIComponentBase.isIdValid ..

这段代码有什么不正确的?如何将动态 id 分配给标签和 id 相同的复选框 suhc。我需要这个用于自动机。

4

1 回答 1

4

id属性在视图构建期间进行评估,但<ui:repeat>在视图渲染期间运行。从本质上讲,您的 ID 最终null确实是无效的。

只是不要尝试手动分配生成 ID。将<ui:repeat>已经自动在客户端 ID 中插入当前迭代索引。这个例子,

<h:form id="formId">
    <ui:repeat ...>
        <h:outputLabel for="checkboxId" ... />
        <h:selectBooleanCheckBox id="checkboxId" ... />
    </ui:repeat>
</h:form>

最终会像

<form id="formId">
     <label for="formId:0:checkboxId">...</label>
     <input type="checkbox" id="formId:0:checkboxId" />
     <label for="formId:1:checkboxId">...</label>
     <input type="checkbox" id="formId:1:checkboxId" />
     <label for="formId:2:checkboxId">...</label>
     <input type="checkbox" id="formId:2:checkboxId" />
     ...
</form>

如果您绝对肯定需要手动摆弄这样的 ID,请<c:forEach>改用。它在视图构建期间运行,在物理上生成多个 JSF 组件。您可以在属性中使用<c:forEach var>和。varStatusid

也可以看看:


顺便问一下,你考虑<h:selectManyCheckbox>过目的吗?

于 2013-07-03T11:59:02.447 回答