2016-11-21 51 views
0

两次我有一个Facelets标记这样当复制组件ID例外:JSF:包括相同Facelets标记

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

现在,如果我inlcude此Facelets标记两次在同一页上,我得到一个异常抱怨复制组件ID。这里提出的一个解决方案https://stackoverflow.com/a/21572756/1785730是为id提供一个前缀。但是,我发现每次使用此facelets标签时都必须提供一个id前缀,这很麻烦。顺便说一句,我不需要标签外的h:inputText的id。

所以我想两种方式我怎样才能解决这个问题:

  1. 有没有办法到H链接:消息发送到H:inputText的,而不必指定IDS?
  2. 如果没有,我可以用NamingContainer包装标签。哪个元素适合这个?我不能在这里使用h:form,因为这个标签已经进入了一个表单。
+0

为什么不从你指的链接做'3'? – Kukeltje

+0

我正在寻找更轻量级的解决方案。我宁愿留下facelets。 – user1785730

+0

此外,复合组件最终是* one *组件。我的标签正好适合三列h:panelGrid。 – user1785730

回答

-2

你的页面应该是这样的

<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定义和它的形式和投入。

+1

如何在包含我的标签两次时解决重复的id异常? – user1785730

+0

在每一种形式中,每个标签都必须有唯一的ID。第一个改进你的页面,你使用的是不含主模板的facelets组合,其次确定每个h:form组件都有唯一的id。 –