SetPropertyListener Проблема при использовании с af: commandButton в oracle adf - PullRequest
0 голосов
/ 31 января 2020

Привет, я хочу установить pageflowScope с помощью setPropertyListener, и когда я использую это в h: commandButton, это работает, но когда я использую это в af: commandButton, и когда я нажимаю кнопку, это не работает, но во второй раз, когда я нажимаю кнопку это работает ... когда я нажимаю кнопку в первый раз, он должен поместить результат метода в переменную pageflowScope, но он всегда делает это во втором щелчке ... Я не знаю, почему

здесь мой код

  <af:panelFormLayout id="pfl2">
                            <af:inputText value="#{bindings.usrname.inputValue}" label="نام کاربری"
                                          required="#{bindings.usrname.hints.mandatory}"
                                          columns="#{bindings.usrname.hints.displayWidth}"
                                          maximumLength="#{bindings.usrname.hints.precision}"
                                          shortDesc="#{bindings.usrname.hints.tooltip}" id="it1">
                                <f:validator binding="#{bindings.usrname.validator}"/>
                            </af:inputText>
                            <af:inputText value="#{bindings.passwrd.inputValue}" label="رمزعبور"
                                          required="#{bindings.passwrd.hints.mandatory}"
                                          columns="#{bindings.passwrd.hints.displayWidth}"
                                          maximumLength="#{bindings.passwrd.hints.precision}"
                                          shortDesc="#{bindings.passwrd.hints.tooltip}" id="it2">
                                <f:validator binding="#{bindings.passwrd.validator}"/>
                            </af:inputText>
                            <af:button actionListener="#{bindings.execPLSQLProcedure.execute}" text="execPLSQLProcedure"
                                       disabled="#{!bindings.execPLSQLProcedure.enabled}" id="b1">
                                <af:setPropertyListener from="#{bindings['return'].inputValue}"
                                                        to="#{pageFlowScope.Result}" type="action"/>
                            </af:button>
                        </af:panelFormLayout>

как я могу это исправить или скажите, пожалуйста, альтернативный способ ... спасибо

1 Ответ

0 голосов
/ 31 января 2020

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

1) Если вы его не видите, вам сначала нужно добавить частичный триггер к вашей кнопке:

<af:commandButton partialTriggers="pfl2" partialSubmit="true" actionListener="#{bindings.execPLSQLProcedure.execute}" text="execPLSQLProcedure" disabled="#{!bindings.execPLSQLProcedure.enabled}" id="b1" >
    <af:setPropertyListener from="#{bindings['return'].inputValue}" to="#{pageFlowScope.Result}" type="action"/>
</af:button>

, если действие должно быть выполнено посредством частичной отправки страницы или нет. По умолчанию установлено значение false: частичная страница не отправлена; полная страница будет обновлена. При значении true полная страница обновляться не будет. Чтобы повторно отобразить указанные c компоненты на вашей странице в ответ на частичную отправку страницы, вы должны сообщить об этом ADF Faces. Самый простой способ сделать это - с помощью атрибутаpartalTriggers.

2) Если вы хотите обойти проверку, вы также можете добавить атрибут немедленного = "true". В вашем случае это выглядит не так, как вы, поскольку вы хотите проверить длину пароля и требования. См. 1)

<af:commandButton immediate="true" partialTriggers="pfl2" partialSubmit="true" actionListener="#{bindings.execPLSQLProcedure.execute}" text="execPLSQLProcedure" disabled="#{!bindings.execPLSQLProcedure.enabled}" id="b1" >
    <af:setPropertyListener from="#{bindings['return'].inputValue}" to="#{pageFlowScope.Result}" type="action"/>
</af:button>

см. Документы: https://docs.oracle.com/cd/E12839_01/apirefs.1111/e12419/tagdoc/af_commandButton.html

будет ли проверка данных - на стороне клиента или на стороне сервера - будет пропускается, когда события генерируются этим компонентом. Когда значение «немедленное» равно true, действие команды и ActionListeners, включая ActionListener по умолчанию, предоставленный реализацией JavaServer Faces, будут выполняться на этапе Apply Request Values ​​жизненного цикла обработки запроса, а не в ожидании фазы Invoke Application. Поскольку проверка выполняется во время процесса валидаторов (после применения значений запроса, но до вызова приложения), установка немедленного значения в значение true пропустит проверку.

...