Invocando method action automaticamente no ADF

Às vezes você precisa que um methodAction execute automaticamente quando você carrega uma página no ADF. Isso é muito comum quando você tem um formulário em uma página e o resultado é mostrado em outra página.

Faça o download do aplicativo de amostra – InvokeMethodActionAutoApp.zip – ele tem um task flow com duas páginas, List e Result. A página List tem dois botões, e quando eu clico sobre eles, a página Result é mostrada. Antes de a página Result ser carregada, um methodAction é invocado.

Este é o task flow:

invoking-method-action-automatically-in-adf1

A página List tem o seguinte código:

<af:document id="d1" title="CurrencyConverter">
  <af:form id="f1">
    <af:panelGroupLayout id="pgl1" layout="vertical">
      <af:outputText value="Currency Converter:" id="ot1"/>
      <af:spacer width="10" height="10" id="s2"/>
      <af:commandButton text="Brazilian Real (BRL) to U.S. Dolar (USD)" id="cl1" action="goResult">
        <af:setActionListener from="#{'BRL'}" to="#{pageFlowScope.fromCurrency}"/>
        <af:setActionListener from="#{'USD'}" to="#{pageFlowScope.toCurrency}"/>
      </af:commandButton>
      <af:spacer width="10" height="10" id="s1"/>
      <af:commandButton text="Brazilian Real (BRL) to Euro (EUR)" id="cl2" action="goResult">
        <af:setActionListener from="#{'BRL'}" to="#{pageFlowScope.fromCurrency}"/>
        <af:setActionListener from="#{'EUR'}" to="#{pageFlowScope.toCurrency}"/>
      </af:commandButton>
    </af:panelGroupLayout>
  </af:form>
</af:document>

A página Result tem o seguinte código:

<af:document id="d1" title="CurrencyConverter">
  <af:form id="f1">
    <af:panelGroupLayout id="pgl1" layout="vertical">
      <af:panelGroupLayout id="pgl2">
        <af:outputText value="The conversion rate from #{pageFlowScope.fromCurrency} to #{pageFlowScope.toCurrency} is: "
                       id="ot2"/>
        <af:outputText value="#{bindings.Return.inputValue}" id="ot1">
          <af:convertNumber groupingUsed="false"
                            pattern="#{bindings.Return.format}"/>
        </af:outputText>
      </af:panelGroupLayout>
      <af:spacer width="10" height="20" id="s1"/>
      <af:commandButton text="Back" id="cb1" action="goList"/>
    </af:panelGroupLayout>
  </af:form>
</af:document>

Este é o binding da página Result:

invoking-method-action-automatically-in-adf2

Tudo que você tem a fazer é criar um invokeAction dentro da seção Executables, e movê-lo para o primeiro lugar, para executar inicialmente antes de qualquer outro executável.

invoking-method-action-automatically-in-adf3

invoking-method-action-automatically-in-adf4

Mude a propriedade Refresh para Always.

invoking-method-action-automatically-in-adf5

Este é o resultado!

invoking-method-action-automatically-in-adf6

invoking-method-action-automatically-in-adf7

Waslley Souza

Autor: Waslley Souza

Consultor Oracle com foco em tecnologias Oracle Fusion Middleware e SOA. Certificado Oracle WebCenter Portal, Oracle ADF e Java.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *