Курсор курсора всегда меняется после запроса AJAX - PullRequest
1 голос
/ 30 октября 2019

Я пытаюсь держать кнопку на странице JSF отключенной, пока все поля ввода на странице не введены.

Первое, что я попробовал, - это использовать частичные триггеры накнопка, с выражением EL в свойстве «Отключено» и добавлением частичных триггеров на кнопку с идентификаторами полей ввода. Чтобы сделать эту работу, я также установил «AutoSubmit» в true для всех полей ввода.

<af:inputText label="First Name" id="fn_input" autoSubmit="true">
       <f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true">
       <f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" partialTriggers="fn_input ln_input" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>

Это работает, однако, когда оба поля ввода заполнены, кнопка включается только тогда, когда пользователь нажимает за пределамиполе (или выделяется из него нажатием клавиши tab или щелчком мыши в другом месте).

Поэтому второй метод, который я попытался, - это использовать вызов ajax для события «keyPress» поля ввода и обновить кнопку.

<af:inputText label="First Name" id="fn_input" autoSubmit="true">
       <f:ajax render="submit_btn" event="keyPress" />
       <f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true">
       <f:ajax render="submit_btn" event="keyPress" />
       <f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>

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

Используя инструменты проверки Chrome, я отследил вызов ajax и обнаружил, что кнопка обновляется так же, как и кнопка, что приводит к сбросу курсора в начало слова.

Как мне решитьэта проблема?

Примечание:

  • Я использую выпуск 12c.

  • Кнопка отправки и текст вводаиз-за требований к дизайну и компоновке, они не находятся в той же панели FormLayout.

Заранее спасибо.

1 Ответ

0 голосов
/ 31 октября 2019

В Oracle ADF, если вы хотите обновить компонент и все его атрибуты, вам нужно добавить PPR на его родительский компонент.

В вашем первом случае:

<af:panelFormLayout id="pfl1" partialTriggers="fn_input ln_input"> 
    <af:inputText label="First Name" id="fn_input" autoSubmit="true">
           <f:validator validatorId="NameValidator"/>
    </af:inputText>
    <af:inputText label="Last Name" id="ln_input" autoSubmit="true">
           <f:validator validatorId="NameValidator"/>
    </af:inputText>
    <af:button text="Submit" id="submit_btn" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>
</af:panelFormLayout>
...