Jsf 使用id="#{…};原因java.lang.IllegalArgumentException:不允许使用空id属性

Jsf 使用id="#{…};原因java.lang.IllegalArgumentException:不允许使用空id属性,jsf,el,Jsf,El,我需要解决在JSF中为某些组件生成动态ID的问题 看看这个例子: <h:outputText id="#{bean.id}" value="#{bean.value}" /> 当我查看生成的HTML输出时,组件的ID是空的。这是如何造成的,我如何解决 你说得对。我在datatable中使用它 如果#{bean}表示在var属性中声明的当前迭代对象,则可能发生这种情况,如下所示: <h:dataTable value="#{someBean.beans}" var="bean"

我需要解决在JSF中为某些组件生成动态ID的问题

看看这个例子:

<h:outputText id="#{bean.id}" value="#{bean.value}" />
当我查看生成的HTML输出时,组件的ID是空的。这是如何造成的,我如何解决


你说得对。我在datatable中使用它

如果
#{bean}
表示在
var
属性中声明的当前迭代对象,则可能发生这种情况,如下所示:

<h:dataTable value="#{someBean.beans}" var="bean">
    <h:column>
        <h:outputText id="#{bean.id}" value="#{bean.value}" />
  • 使用普通HTML元素:

    <h:dataTable value="#{someBean.beans}" var="bean">
        <h:column>
            <span id="#{bean.id}">#{bean.value}</span>
    
    
    #{bean.value}
    
  • 不要设置动态ID,而是固定ID。JSF将通过在HTML输出前面加上表的行索引来确保其唯一性:

    <h:dataTable value="#{someBean.beans}" var="bean">
        <h:column>
            <h:outputText id="id" value="#{bean.value}" />
    
    
    
  • 另见:
    • (您可以用“动态ID”替换“JSTL”)

    是的,我确信。它的唯一id来自数据库。你是对的。我在datatable中使用它。有什么解决办法吗?谢谢你的回答。我的想法是,我想从primefaces为每一列提供连接工具提示,该提示要求ID连接在。BalusC:你从来没有需要动态ID吗?如果没有动态ID,您如何在JSF页面上多次使用可重用的facelet标记/组件?@bch:给它一个固定ID。例如,
    。或者把它做成复合组件。你的建议救了我的命!谢谢:)
    <h:dataTable value="#{someBean.beans}" var="bean">
        <h:column>
            <span id="#{bean.id}">#{bean.value}</span>
    
    <h:dataTable value="#{someBean.beans}" var="bean">
        <h:column>
            <h:outputText id="id" value="#{bean.value}" />