Primefaces 在ui中使用Omnifaces validateAllOrNone组件:重复
我有以下问题: 我尝试在ui:repeat中使用o:validatealornone组件,这很好。但它不适用于我的复合组件 我的复合组件实际上是简单的p:inputText,用于舒适地输入电话号码。在那里,我使用了javascript,它提供了使用不同电话号码(inputPhoneNumber)的工作Primefaces 在ui中使用Omnifaces validateAllOrNone组件:重复,primefaces,jsf-2.2,omnifaces,Primefaces,Jsf 2.2,Omnifaces,我有以下问题: 我尝试在ui:repeat中使用o:validatealornone组件,这很好。但它不适用于我的复合组件 我的复合组件实际上是简单的p:inputText,用于舒适地输入电话号码。在那里,我使用了javascript,它提供了使用不同电话号码(inputPhoneNumber)的工作 $(“#{cc.fullId}”).intlTelInput( { utilsScript:“intl tel input/js/utils.js”, autoHideDialCode:错误,
$(“#{cc.fullId}”).intlTelInput(
{
utilsScript:“intl tel input/js/utils.js”,
autoHideDialCode:错误,
国家模式:错误,
首选国家:[{cc.preferredCountries}],
仅限国家:[抄送国家],
dropdownContainer:'body'
}
);
此外,我还有一个表单,可以创建联系人,如电话号码、电子邮件、skype和其他。该表单允许创建联系人列表。在这里,我使用了复合组件,如果联系人的类别是电话号码,则使用其他简单输入文本:
<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"/>
</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>
...
我使用了o:validateAllOrNone来检查联系人类型和他的值是否为空。它适用于p:inputText,但当我尝试将此组件用于mycomponent:inputPhoneNumber时,我发现以下异常:
异常消息:ValidateAllOne属性“components”必须引用
现有客户端ID。找不到客户端ID“联系人类型”
我发现了一个问题,我知道如何完全进入ui:repeat。之后,我重写了我的代码:
<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,但我发现了相同的异常:
异常消息:ValidateAllOne属性“components”必须引用
现有客户端ID。客户端ID
找不到“联系人创建表单列表2联系人类型”
我怎样才能解决这个问题呢?我应该从另一边走。很容易获得复合组件的完整id,并在o:validateAllone处使用它。它解决了这个问题。在这种情况下,复合组件的正确id是触点\电话\值-contact\电话\值。之后,代码如下所示:
<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 delimeter。我应该从另一边走。很容易获得复合组件的完整id,并在o:validateAllone处使用它。它解决了这个问题。在这种情况下,复合组件的正确id是触点\电话\值-contact\电话\值。之后,代码如下所示:
<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 delimeter