2015-04-17 2 views
0

На моей странице xhtml у меня есть поле вводаText с прикрепленными к нему двумя валидаторами. Также есть аякс-событие «размытие», прикрепленное для активации проверки при переключении фокуса с поля. Вот код:Как условно запустить jsf Validator при размытии с p: ajax?

<t:selectOneMenu id="locateRecordBy" value="#{personBean.locateRecordBy}"> 
    <f:selectItems value="#{personBean.locateRecordByItems}"/> 
</t:selectOneMenu> 

<t:inputText id="personName" 
    value="#{personBean.name}" 
    required="true" 
    requiredMessage="Name is required."> 
     <p:ajax event="blur" partialSubmit="true" process="@this" update="nameerror" global="false" /> 
     <f:validator disabled="#{param['PersonForm:locateRecordBy'] == 'FEMALE'}" validatorId="com.myapp.validators.MalePersonValidator"/> 
     <f:validator disabled="#{param['PersonForm:locateRecordBy'] == 'MALE'}" validatorId="com.myapp.validators.FemalePersonValidator"/> 
</t:inputText> 

Так что я хотел бы проверить PERSONNAME против соответствующего валидатора в зависимости от выбора пункта после фокуса не больше на поле PERSONNAME. Любые предложения, пожалуйста, что я должен изменить или добавить?

p.s. По форме подать валидацию очень хорошо.

+0

Я не понял, что это означает: «Валидатор в зависимости от выбора элемента после фокуса больше не находится в поле« имя_пользователя »*. Какая библиотека '' от? Это из Томагавк? Являются ли эти валидаторы вызваны/запущены и работают? Предполагая, что вы назначили эти классы валидатора, например, '@FacesValidaror (value =" femalePersonValidator ")', в этом случае вам просто нужно указать 'validatorId =" femalePersonValidator "'. Полное имя класса не требуется. Атрибут 'global', связанный с' ', должен быть учтен при использовании' '. – Tiny

+0

@Tiny Если параметр_female_ выбран из selectOneMeny, тогда 'FemalePersonValidator' включен и используется для проверки поля _name_, в то время как' MalePersonValidator' отключен, также, если _male_ выбран из selectOneMeny, тогда 'MalePersonValidator' включен и используется для проверки поля _name_, FemalePersonValidator' отключен. Это очень хорошо работает при отправке формы. Проверка Ajax поля - это тот, который не работает. 't: inputText' от Tomahawk. – keymaker369

ответ

0

На самом деле я нашел то, чего не хватает в моем коде. Я добавил locateRecordBy componnent быть обработаны с помощью AJAX так вместо того, чтобы это:

<p:ajax event="blur" partialSubmit="true" process="@this" update="nameerror" global="false" /> 

у меня есть это:

<p:ajax event="blur" partialSubmit="true" process="@this, locateRecordBy" update="nameerror" global="false" /> 

В основном я забыл поручить JSF обрабатывать locateRecordBy и поэтому locateRecordBy параметр никогда не был присутствует в запрос ajax, который вызвал отказ обоих валидаторов, и проверку поля personName, которое должно быть пропущено.