Собственная проверка JavaScript входных данных формы в JSF - PullRequest
0 голосов
/ 27 февраля 2012

Я учился в JSF даже для слабых, поэтому я очень новичок в этом. Я уже нашел одну «проблему» ... ну, на самом деле это не большая проблема, а скорее косметическая проблема.

Я создал базовую форму для регистрации пользователей с некоторыми тегами проверки (см. Код выше). Все работает нормально, но я также хотел бы использовать управление на стороне клиента через JavaScript. Я уже обнаружил, что могу написать свою собственную функцию проверки JavaScript, но это не то, что я хотел бы иметь. Я уже определил правила проверки в тегах проверки, поэтому я считаю, что глупо писать код вручную, когда такая хорошая структура, как JSF, способна выполнять большинство из этих функций автоматически. Я также обнаружил, что Sun намеренно удалила автоматическую проверку JavaScript из JSF.

Итак, мой вопрос: есть ли способ заставить JSF генерировать функции JavaScript (с помощью f: validate info), используя их автоматически при отправке формы? Кроме того, я использую PrimeFaces, возможно ли добиться этого с помощью PrimeFaces?

Вот код формы, которую я сделал:

<h:form>
    <table>
        <tr>
            <th><label for="registration-email">#{usersTexts.email}:</label></th>
            <td>
                <h:inputText value="#{userRegistry.newUser.email}" id="registration-email" validatorMessage="#{msg.invalidEmail}" maxlength="100">
                    <f:validateRegex pattern="^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$" />
                </h:inputText>
            </td>
        </tr>
        <tr>
            <th><label for="registration-name">#{usersTexts.name}:</label></th>
            <td>
                <h:inputText value="#{userRegistry.newUser.name}" id="registration-name" validatorMessage="#{formsTexts.field} #{usersTexts.name} #{msg.isEmpty}" maxlength="100">
                    <f:validateRequired />
                </h:inputText>
            </td>
        </tr>
        <tr>
            <th><label for="registration-password1">#{usersTexts.password}:</label></th>
            <td>
                <h:inputSecret value="#{userRegistry.newUser.password}" binding="#{password}" id="registration-password1" validatorMessage="#{formsTexts.field} #{usersTexts.password} #{msg.isEmpty}">
                    <f:validateRequired />
                </h:inputSecret>
            </td>
        </tr>
        <tr>
            <th><label for="registration-password2">#{usersTexts.passwordAgain}:</label></th>
            <td>
                <h:inputSecret id="registration-password2" validatorMessage="#{msg.passwordsNotEqual}">
                    <f:validateLength minimum="#{user.MIN_PASSWORD_LENGTH}" />
                    <f:validator validatorId="equality" />
                    <f:attribute name="matchAgainst" value="#{password}" />
                </h:inputSecret>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <p:captcha immediate="true" validatorMessage="#{msg.wrongCaptcha}" requiredMessage="#{formsTexts.captcha} #{msg.isEmpty}" />
            </td>
        </tr>
        <tr>
            <td colspan="2" class="submit_row"><h:commandButton value="#{usersTexts.register}" action="#{userRegistry.register}" /></td>
        </tr>
    </table>
</h:form>

1 Ответ

0 голосов
/ 27 февраля 2012

Спецификация JSF не определяет и не предлагает никакой собственной проверки JavaScript.

Если вам нужна только немедленная обратная связь, просто введите

<f:ajax event="blur" render="messages" /> 

внутри рассматриваемых полей ввода и

<f:ajax execute="@form" render="@form" /> 

внутри командных кнопок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...