[Oracle ADF] Нажать на скрытую кнопку с помощью JavaScript (ComponentReference)

Итак, есть 2 кнопки.
Одна для печати pdf, а другая, должна выполнять какую-нибудь логику предшествующую нажатию на эту кнопку.

Сделано т.к. никакой логики добавить в событие печати не получилось.

Вообще обузить можно везде, где нужно вызвать кнопку на форме, когда непонятно какой у нее id.

А непонятен он т.к. этот id может быть динамическим.



1
2
3
4
5
6
7
8
9
<af:button id="b6"
                         ***
                          actionListener="#{pageFlowScope.OrdersSchedulePDFBean.onPrintCliked}">
</af:button>
<af:button id="b7"
                          ***
                          binding="#{pageFlowScope.MyBean.hiddenPrintButton}" visible="false">
                      <af:fileDownloadActionListener method="#{pageFlowScope.MyBean.exportToPDF}" contentType="application/pdf" filename="myPDF.pdf"/>
</af:button>



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// ---------------------------------------

private ComponentReference hiddenPrintButton;

public void setHiddenPrintButton(RichButton hiddenPrintButton) {
    this.hiddenPrintButton = ComponentReference.newUIComponentReference(hiddenPrintButton);
}

public RichButton getHiddenPrintButton() {
    if (hiddenPrintButton != null) {
        return (RichButton) hiddenPrintButton.getComponent();
    } else {
        return null;
    }
}

// ---------------------------------------


private void onPrintCliked() {

        if (// something true) {
            // вызвать печать
            doRun(this.getHiddenPrintButton().getClientId(FacesContext.getCurrentInstance()));

        } else {
            ShowMessage.onScreen("MY MESSAGE");
        }
}



public void exportToPDF(FacesContext facesContext, OutputStream outputStream) {

    // логика по печати pdf
}



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void doRun(String buttonId) {
    FacesContext context = FacesContext.getCurrentInstance();

    StringBuilder script = new StringBuilder();

    script.append("var comp1 = AdfPage.PAGE.findComponentByAbsoluteId('")
          .append(buttonId)
          .append("'); ");

    script.append("var actionEvent = new AdfActionEvent(comp1); ");
    script.append("actionEvent.forceFullSubmit(); ");
    script.append("actionEvent.noResponseExpected(); ");
    script.append("actionEvent.queue(); ");

    ExtendedRenderKitService erks = Service.getService(context.getRenderKit(), ExtendedRenderKitService.class);
    erks.addScript(context, script.toString());
}