Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 Can';动态设置组件标识符_Jsf 2_Primefaces_Identifier - Fatal编程技术网

Jsf 2 Can';动态设置组件标识符

Jsf 2 Can';动态设置组件标识符,jsf-2,primefaces,identifier,Jsf 2,Primefaces,Identifier,我在数据表中有一个p:inputText字段,我正在尝试动态设置它的标识符 但是,我得到以下错误: 组件标识符不能是零长度字符串 用作id的字符串均不为null或长度为零 <h:form id="updateform"> <p:dataTable id="updatetable" value="#{EditingBean.row}" var="column" style="width: 9

我在数据表中有一个
p:inputText
字段,我正在尝试动态设置它的标识符

但是,我得到以下错误:

组件标识符不能是零长度字符串

用作id的字符串均不为null或长度为零

<h:form id="updateform">
            <p:dataTable id="updatetable" value="#{EditingBean.row}" var="column"
                                 style="width: 983px; overflow-x: auto; white-space: normal;">
                <f:facet name="header">
                    <h:outputText value="#{EditingBean.currentStatement.statementName}" />
                </f:facet>
                <p:column rendered="#{column.display}" style="white-space: normal;">
                    <h:outputText value="#{column.alias}" />
                </p:column>
                <p:column rendered="#{column.display}" style="white-space: normal;">
                    <p:inputText id="#{column.name}" value="#{column.value}" />
                </p:column>
                <f:facet name="footer" style="text-align: right;">
                    <h:commandButton value="Update" action="#{EditingBean.update()}"
                        ajax="false" />
                </f:facet>
            </p:dataTable>
        </h:form>

必须在视图生成期间设置
id
属性

但是,由于
{column}
声明为
,因此它仅在视图渲染期间可用。由于它在视图构建时间之后运行,因此在视图构建时间内它是
null

我不确定具体的功能需求,您认为这样做是正确的解决方案。代码的自文档化程度不足以正确猜测它。所以很难给出一个合适的答案。在任何情况下,您基本上有两种选择:

  • 使用在视图构建期间运行的迭代标记,例如JSTL

    
    ...
    
  • 实际上,您可能根本不需要动态ID。给它一个固定的ID

    <p:inputText id="name" ... />
    
    
    
    JSF已经负责在HTML输出中生成唯一的ID(前缀为行索引)。右键单击页面并查看源代码以自己查看

  • 另见:

    再次检查#{EditingBean.row}对象中每个对象的#{column.name}值。如果哪怕有一个name属性为null或“”(空字符串),您也会得到错误。我有,它们中绝对没有一个为null或“”。以下是值:mep_ident、mep_ptrpartident、mep_ptrpasident、mep_code_doc、,mep_Production我需要使用名称来验证输入,因为我事先不知道输入应该是什么类型。只需在
    styleClass
    上设置一个CSS类,比如
    styleClass=“phone”
    styleClass=“url”
    styleClass=“email”
    ,等等。这些输入无论如何都不可能是唯一的,所以你的
    id
    方法首先已经毫无意义了。使用jQuery,您可以轻松地获取它们,如
    $(“.phone”)
    $(“.email”)
    ,等等。一列通常有多行,对吗?所以一列中的输入数和行数一样多,对吗?因此,例如,10行,您最终有10个电话输入,等等,这很好。这仍然不意味着这些输入在HTML上下文中是唯一的。它们仍然有多个,只是有条件地显示/隐藏。因此,CSS类是正确且最简单的解决方案。但我的问题是,在验证(我使用的是
    )时,我需要访问字段。是否可以像通过id一样通过样式类访问组件?
    <p:inputText id="name" ... />