Выполнение функции javascript перед отображением сообщения о необходимости значения - PullRequest
0 голосов
/ 15 июня 2011

У меня короткий вопрос, который беспокоил последние несколько часов:

Как я могу выполнить функцию javascript до отображения сообщения о том, что требуется значение? (при отправке формы некоторое значение внутри нее пусто, когда его необходимо ввести).

Я столкнулся с этой проблемой при использовании плагина капчи RealPerson для jQuery на моей странице jsp. Когда я нажимаю кнопку «Отправить» с полем ввода для капчи, капча пропадает.

Обновление 1:

Я пробовал с привязкой и рендерингом, но проблема все еще существует.

<h:outputLabel for="captcha" value="#{ui.pleaseEnterTextInTheImage}"  rendered="#{sessionBean.showCaptcha}"/>
<h:panelGroup rendered="#{sessionBean.showCaptcha}">
     <h:inputText id="captcha" styleClass="captcha" binding="#{captcha}"
                                                     validator="#{validationBean.captchaValidator}" required="true"/>
     <h:outputText value=" "/><h:message for="captcha" styleClass="captchaMsg"/>
</h:panelGroup>
<h:panelGroup rendered="#{!captcha.valid}">
     <script>alert('Foo input is invalid!');</script>
</h:panelGroup>

Обновление 2:

Когда страница откроется:

before

После того, как я нажму «Зарегистрироваться» с вводом кода, оставленным пустым after

Обновление 3:

jQuery-код, который я использую.

Сначала при загрузке страницы я назначаю капчу для поля:

$(function() {
      $('.captcha').realperson();
});

Затем, после того, как я переназначу новую капчу после того, как поле будет перерисовано путем вызова этой функции из моего бина:

function updateCaptchaFromBean() {
    $(function() {
        $('.captcha').realperson();
    });
}

Найденное решение

Я нашел простой трюк с JavaScript, чтобы решить эту проблему с помощью onclick():

<h:commandButton styleClass="buttonSubmit" value="#{ui.registerBUTTON}"
     action="#{register.addAction}"
     onclick="if ($('.captcha').val() == '') return false"
     id="submitBtn" />

1 Ответ

1 голос
/ 15 июня 2011

Если предположить, что JSF 1.x на JSP без ajax, то вот как вы могли бы сделать это в самом простом виде:

<h:panelGroup rendered="#{!foo.valid}">
    <script>alert('Foo input is invalid!');</script>
</h:panelGroup>
...
<h:inputText id="foo" binding="#{foo}" value="#{bean.foo}" required="true" />
<h:message id="fooMessage" for="foo" />

Обновите согласно комментариям.не работаетСогласно вашему обновленному вопросу вы, кажется, используете пользовательский валидатор.Эта проблема может означать только то, что вы не добавили ValidatorException в свой пользовательский валидатор ввода, а просто добавили сообщение.Это не верно.Вы должны выбросить ValidatorException, чтобы JSF мог пометить компонент как недействительный.

Итак, вы не должны делать следующее в методе валидатора:

context.addMessage(component.getClientId(context), new FacesMessage("Fail"));

, но вы должнывместо этого

throw new ValidatorException(new FacesMessage("Fail"));

таким образом #{!captcha.valid} разрешится как true.

...