2013-09-03 2 views
1

У меня есть страница JSF, в которой я повторяю список для отображения <h:dataTable> с некоторыми строками, содержащими флажок, текст и текстовое поле. Я добавил проверки таким образом, что если проверяется chechbox в строке, пользователь должен ввести значение в соответствующее текстовое поле. Кроме того, у меня есть флажок с идентификатором 'copy' выше <h:dataTable>, который должен скопировать значение, введенное в первом текстовом поле, ко всем другим текстовым полям, чьи флажки отмечены в пределах <h:dataTable>. Я использовал ajax-вызов для этого же.Отключить Валидации во время вызова ajax

<h:form prependId="false" id="form"> 
<h:selectBooleanCheckbox value="#{bean.copy}" id="copy"> 
     <p:ajax process="#{bean.mailId}" 
      event="change" partialSubmit="true" 
      listener="#{Controller.copyEmail()}" 
      update="rm"> 
     </p:ajax> 
    </h:selectBooleanCheckbox> 

    <h:dataTable id="rm" width="100%" cellspacing="4" 
     value="#{controller.alertTriggers}" var="alt" 
      columnClasses="c1,c2,c3,c4"> 
      <h:column> 
        <h:selectBooleanCheckbox value="#{alt.checkValue}" id="checkbox" binding="#{checkbox}"/> 
       </h:column> 
       <h:column> 
        <h:outputText value="#{alt.id}" />          
       </h:column> 
       <h:column> 
        <h:outputFormat value="#{alt.msg1}" />        
       </h:column> 
       <h:column>            
        <h:message for="emailID" id="email" styleClass="validation-error"/> 
        <h:inputText value="#{alt.mailId}" id="emailID" style="width: 87%;" required="#{checkbox.value}" requiredMessage="Enter the value"/> 

       </h:column>           

    </h:dataTable>           
</h:form> 

В контроллере

public void copyEmail() { 

//code for copying the first textbox value to all other textboxes 

} 

проверки достоверности работает отлично, но когда я проверить копию флажок, значение текстового поля не копируются в другие текстовые поля. Вместо этого отображаются ошибки проверки. Если я удаляю проверки из текстового поля, копирующая часть работает нормально.

Я попытался использовать immediate=true для моего вызова ajax, но тогда значение флажков внутри <h:dataTable> не обновляется внутри контроллера.

Таким образом, в заключение

Я хочу, чтобы отключить мои валидаций во время вызова Ajax. Есть ли способ сделать это, кроме immediate=true?

ответ

3

Другими словами, вы хотите, чтобы проверить текстовое поле ввода, как required только тогда, когда установлен флажок и истинную кнопку сохранения нажата? Если это так, то вам нужно будет расширить атрибут required с другой проверкой, была ли нажата кнопка сохранения. Вы можете проверить это, указав идентификатор клиента кнопки сохранения на карте параметров запроса.

E.g.

<h:selectBooleanCheckbox binding="#{checkbox}" .../> 
... 
<h:inputText ... required="#{checkbox.value and not empty param[save.clientId]}" /> 
... 
<p:commandButton binding="#{save}" ... /> 
+0

Большое спасибо ... Это было все, что я хотел !!!! –

+0

Добро пожаловать. – BalusC

Смежные вопросы