Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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:两次包含相同facelets标记时出现重复组件id异常_Jsf - Fatal编程技术网

JSF:两次包含相同facelets标记时出现重复组件id异常

JSF:两次包含相同facelets标记时出现重复组件id异常,jsf,Jsf,我有一个facelets标签,如下所示: <ui:composition> <h:outputText value="#{label}"/> <h:inputText id="input" value="#{value}"/> <h:message for="input"/> </ui:composition> 现在,如果我在同一页上两次插入这个facelets标记,我会收到一个异常,抱怨组件ID重复。这里

我有一个facelets标签,如下所示:

<ui:composition>
    <h:outputText value="#{label}"/>
    <h:inputText id="input" value="#{value}"/>
    <h:message for="input"/>
</ui:composition>

现在,如果我在同一页上两次插入这个facelets标记,我会收到一个异常,抱怨组件ID重复。这里提出的一个解决方案是为id提供一个前缀。然而,我发现每次使用facelets标记时都必须提供一个id前缀很麻烦。顺便说一句,我不需要标签外的h:inputText的id

所以我在想两种方法来解决这个问题:

  • 有没有一种方法可以将h:message链接到h:inputText而不必指定ID
  • 如果没有,我可以用NamingContainer包装标签。哪一个元素适合这样做?我不能在这里使用h:form,因为该标记已经进入一个表单

  • 你的页面应该是这样的

    <f:view contracts="default" transient="false">
        <ui:composition template="/template.xhtml">
            <ui:define name="content">
                <h:form>
                    inputs
                </h:form>
            </ui:define>
        </ui:composition>
    </f:view>
    
    
    投入
    

    在ui组合中,您应该有ui定义、表单和输入。

    为什么不从您提到的链接中选择“3”呢?我正在寻找一个更轻量级的解决方案。我更喜欢facelets。此外,复合组件最终也是一个组件。我的标签正好放在一个三列的h:panelGrid中。1)如果不是这样,您找到的答案就已经包含在其中了。2) 已包含在您找到的答案中。所以我真的不明白你为什么问这个重复的问题。如果你引用f:subview:的话,它有一个必需的id参数,这不会让我有任何进一步的了解。如果我不能按照我想要的方式来做,而我最好的选择是为我的标签设置一个id参数,这将是一个可接受的答案。当包含我的标签两次时,这将如何解决重复id异常?在每种形式中,每个标签都必须具有唯一的id。首先改进页面,您使用的是facelets合成,而没有主模板,其次,确保每个h:form组件中的内容都有唯一的id。