Непосредственный атрибут для проверки формы дает неожиданные результаты в JSF - PullRequest
0 голосов
/ 27 октября 2018

Я проверил этот пост и этот пост , но ни одно из этих решений не дало мне четкого ответа на мой вопрос, который у меня возник в этом посте.Попробуйте приведенный ниже пример.

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form id="employeeForm">
            <h:panelGrid columns="3">
                <h:outputLabel for="employeeFirst" value="First: " />
                <h:inputText id="employeeFirst" immediate="true" onchange="submit()">
                    <f:validateLength minimum="3" maximum="30" />
                </h:inputText>
                <h:message for="employeeFirst" errorStyle="color: red" />
                <h:outputLabel for="employeeLast" value="Last: " />
                <h:inputText id="employeeLast">
                    <f:validateLength minimum="3" maximum="30" />
                </h:inputText>
                <h:message for="employeeLast" errorStyle="color: red" />
                <h:outputLabel for="employeeTitle" value="Title" />
                <h:inputText id="employeeTitle">
                    <f:validateLength minimum="3" maximum="30" />
                </h:inputText>
                <h:message for="employeeTitle" errorStyle="color: red" />
            </h:panelGrid>
        </h:form>
    </h:body>
</html>

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

Однако, если вы вставите значение длиной от 3 до 30 символов, сообщение об ошибке для первого поля исчезнет, ​​а два других поля ввода автоматически выдадут сообщения об ошибках.Я не хочу, чтобы эти два сообщения об ошибках появлялись автоматически после успешной вставки значения в первое поле ввода.

Мне показалось, что во втором и третьем полях ввода по умолчанию для непосредственных атрибутов задано значение true, поэтому я немедленно добавилатрибуты и присваивает ложные каждому из них, но результат был таким же, как и раньше.

Как я могу иметь только одно поле в форме для немедленного действия, а не другие поля?


Редактировать:

Я прошу прощения за то, что не разъяснил мой вопрос.Я уже знал, что ajax может обработать сообщение об ошибке для проверки формы, но я хотел, чтобы ведущие спецификации JSF знали, что может быть проблема с атрибутом immediate, чтобы они могли это исправить для следующего выпуска JSF.Я также надеялся, что уже может быть решение этого неожиданного поведения с атрибутом immediate, и в этом случае я хотел бы услышать это в этом посте.В любом случае, спасибо, что предложили мне использовать Ajax для этого.

1 Ответ

0 голосов
/ 30 октября 2018

Пожалуйста, используйте ниже код. Вам нужно удалить onchange = "submit (). Вместо отправки всего, вы можете указать точный компонент, который вам нужно обработать и обновить с помощью f: ajax. Вам необходимо указать список идентификаторов компонентов, которые необходимо обработать, по атрибуту execute и список компонентов, которые необходимо обновить по атрибуту render.

<h:outputLabel for="employeeFirst" value="First: " />
<h:inputText id="employeeFirst">
    <f:validateLength minimum="3" maximum="30" />
    <f:ajax execute="@this" render="@this errorMessageBlock" event="blur" />
</h:inputText>
<h:message for="employeeFirst" id="errorMessageBlock" errorStyle="color: red" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...