2016-08-02 7 views
0

У меня возникли проблемы с получением тега Omnifaces skipValidators для работы с анимированными событиями Primefaces. В принципе, мне нужно обновить многие элементы в форме, основанной на выборе selectOneMenu, но мне также нужно сохранить любые уже введенные значения и не проверять форму. Однако я не могу заставить его работать. Вот небольшая демонстрация проблемы:Omnifaces skipValidators with Primefaces ajax

XHTML:

  <h:form> 
       <h:panelGrid columns="3"> 
        <p:outputLabel for="console" value="Basic:" /> 
        <p:selectOneMenu id="console" value="#{testBean.value}" style="width:125px"> 
         <f:selectItem itemLabel="Select One" itemValue="" /> 
         <f:selectItem itemLabel="Xbox One" itemValue="Xbox One" /> 
         <f:selectItem itemLabel="PS4" itemValue="PS4" /> 
         <f:selectItem itemLabel="Wii U" itemValue="Wii U" /> 
         <p:ajax event="change" process="@form" update="@form"> 
          <o:skipValidators/> 
         </p:ajax> 
        </p:selectOneMenu> 
        <p:message for="console"/> 
        <p:outputLabel for="reqField" value="RequiredField:"/> 
        <p:inputText id="reqField" required="#{testBean.required}" requiredMessage="REQUIRED!"/> 
        <p:message for="reqField"/> 
       </h:panelGrid> 
      </h:form> 

testBean:

@Named(value = "testBean") 
@SessionScoped 
public class TestBean implements Serializable { 

    private String value; 

    /** 
    * Creates a new instance of TestBean 
    */ 
    public TestBean() { 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public boolean isRequired() { 
     return this.value != null && !this.value.isEmpty(); 
    } 

} 

При загрузке страницы, это выглядит правильно - нет Звездочка reqField. После выбора одного из значений консоли страница изменяется правильно, и рядом с reqField появляется звездочка. Однако после выбора значений консоли, если в меню снова выбрано «Выбрать один», отображается ошибка проверки.

Если я правильно понял, o:skipValidators должен помешать проведению валидации. Что тут происходит?

Я использую omnifaces 2.3 и primefaces 5.1.12

ответ

0

Как уже упоминалось в showcase, тег должен быть размещен внутри компонента UICommand или ClientBehaviorHolder. Вы разместили его внутри <p:ajax>, который не является ни тем, ни другим. Вы должны переместить его на улицу, чтобы он стал прямым ребенком <p:selectOneMenu>which is a ClientBehaviorHolder.

<p:selectOneMenu ...> 
    ... 
    <p:ajax ... /> 
    <o:skipValidators /> 
</p:selectOneMenu>