使用Omnifaces validateAllOrNone组件到UI:重复

问题描述:

我有以下问题:使用Omnifaces validateAllOrNone组件到UI:重复

我尝试使用○:validateAllOrNone组件到UI:重复和它的工作很好。但它不适用于我的复合组件。

我的复合成分它确实简单号码:inputText的舒适的输入电话号码。在那里我使用了提供不同电话号码(inputPhoneNumber)的工作。

<p:inputText id="#{cc.attrs.id}" type="tel" label="Номер телефона" value="#{cc.attrs.value}" required="#{cc.attrs.required}" 
      styleClass="#{cc.attrs.styleClass} m-pad-left50" style="#{cc.attrs.style}"> 
</p:inputText> 

<script> 
    $("#{cc.fullId}").intlTelInput(
     { 
      utilsScript: "intl-tel-input/js/utils.js", 
      autoHideDialCode: false, 
      nationalMode: false, 
      preferredCountries: [#{cc.preferredCountries}], 
      onlyCountries: [#{cc.countries}], 
      dropdownContainer: 'body' 
     } 
    ); 
</script> 

此外,我有形式来创建联系人,如电话号码,电子邮件,Skype等。该表格允许创建联系人列表。还有我用我的复合材料部件,如果接触的类别是别人的电话号码简单的输入文字:

我用○:validateAllOrNone检查接触式和他的价值不是空的。它适用于号码:inputText的但是当我试图用这个组件为myComponent的:inputPhoneNumber我捉住了以下异常:

异常消息:ValidateAllOrNone属性“组件”必须引用 现有客户端ID。无法找到客户ID“contact_type”。

我发现,我已经知道如何让全成UI问题the question:重复。从那以后,我已经重写我的代码:

<ui:repeat id="contact_list" value="#{bean.contacts}" var="contact" varStatus="status"> 
    <p:selectOneMenu id="contact_type" value="#{contact.type}"> 
     ... 
    </p:selectOneMenu> 

    <p:outputPanel rendered="#{contact.category.equals(category.PHONE)}"> 
     <mycomponent:inputPhoneNumber id="contact_phone_value" value="#{contact.value}" preferred="ru"> 
     <o:validateAllOrNone components="contact_creation_form-contact_list-#{status.index}-contact_type contact_phone_value"/> 
    </p:outputPanel> 

    <p:outputPanel rendered="#{ne contact.category.equals(category.PHONE)}"> 
     <p:inputText id="contact_other_value" value="#{contact.value}"/> 
     <o:validateAllOrNone components="contact_type contact_other_value"/> 
    </p:outputPanel> 
</ui:repeat> 

现在我已经把对接触式正确的ID,但是我赶上了相同的异常:

异常消息:ValidateAllOrNone属性“组件”必须是指 现有的客户端ID。无法找到客户端ID 'contact_creation_form-list-2-contact_type'。

我该如何解决这个proglem?

我应该从另一边走。很容易获得复合组件的完整ID并使用它在o:validateAllOrNone。它解决了这个问题。在这种情况下,复合组件的正确ID为contact_phone_value-contact_phone_value。在此之后代码lookes像:

<ui:repeat value="#{bean.contacts}" var="contact"> 
    <p:selectOneMenu id="contact_type" value="#{contact.type}"> 
     ... 
    </p:selectOneMenu> 

    <p:outputPanel rendered="#{contact.category.equals(category.PHONE)}"> 
     <mycomponent:inputPhoneNumber id="contact_phone_value" value="#{contact.value}" preferred="ru"> 
     <o:validateAllOrNone components="contact_type contact_phone_value-contact_phone_value"/> 
    </p:outputPanel> 

    <p:outputPanel rendered="#{ne contact.category.equals(category.PHONE)}"> 
     <p:inputText id="contact_other_value" value="#{contact.value}"/> 
     <o:validateAllOrNone components="contact_type contact_other_value"/> 
    </p:outputPanel> 
</ui:repeat> 

你也应该知道,我用“ - ”而不是“:” id的分隔符。