Как проверить перед открытием всплывающего окна в ADF?

У меня есть страница jspx в adf, содержащая «Командную ссылку», и при нажатии на Командную ссылку всплывающее окно открывается через определенные свойства «showPopupBehaviour».

Но я хочу что-то проверить при нажатии CommandLink, и если проверка возвращает True, тогда должно открываться только всплывающее окно, иначе появится соответствующее сообщение, если оно вернет False во время проверки. Я изучил это и попытался использовать следующий код для программного вызова всплывающего окна, но не добился в нем успеха, и даже всплывающее окно не открывалось при нажатии CommandLink.

Ниже приведен код, который я пробовал:

/* Below method "showPopup_aug" is invoked through actionListener of CommandLink */

public void showPopup_aug(ActionEvent evt_popup) {
    System.out.println("entered in showPopup_aug method");

    RichPopup popup_aug = (RichPopup)JSFUtils.findComponentInRoot("pop_aug");

    System.out.println("Popup_id="+popup_aug.getId());

    /*
    //pop_aug.PopupHints hints_aug = new RichPopup.PopupHints();

    RichPopup.PopupHints hints_aug = new RichPopup.PopupHints();
    popup_aug.show(hints_aug);       

    System.out.println("Popup-Aug opened");        

    */
    System.out.println("before calling showPopup method");

    showPopup(popup_aug, true);

    System.out.println("Popup-Aug opened"); 

}

Ниже метод «showPopup» вызывается для открытия всплывающего окна на основе параметров, полученных от метода «showPopup_aug»:

public static void showPopup(RichPopup pop, boolean visible) {
    try {
        System.out.println("entered in showPopup code");
        FacesContext context = FacesContext.getCurrentInstance();
        if (context != null && pop != null) {
            //String popupId = pop.getClientId(context);
            String popupId = pop.getId();

            System.out.println("ClientID of popup="+popupId);

            if (popupId != null) {
                System.out.println("Client PopupID is not null");

                StringBuilder script = new StringBuilder();
                script.append("var popup = AdfPage.PAGE.findComponent('").append(popupId).append("'); ");
                if (visible) {
                    script.append("if (!popup.isPopupVisible()) { ").append("popup.show();}");
                } else {
                    script.append("if (popup.isPopupVisible()) { ").append("popup.hide();}");
                }
                ExtendedRenderKitService erks = Service.getService(context.getRenderKit(), ExtendedRenderKitService.class);
                erks.addScript(context, script.toString());
            }
        }
        System.out.println("completion of showPopup code");
    }
    catch (Exception e) {
        System.out.println("exception occured in showPopup code="+e.getMessage());
        throw new RuntimeException(e);
    }
}

Я хочу выполнить проверку или действие перед открытием всплывающего окна adf в приложении ADF.


person kits    schedule 15.06.2018    source источник
comment
Пожалуйста, прочитайте При каких обстоятельствах я могу добавить «срочно» или другие подобные фразы к моему вопросу, чтобы получить более быстрые ответы? - Подводя итог, можно сказать, что это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.   -  person halfer    schedule 15.06.2018
comment
Я думаю, что stackoverflow.com/questions/12460572/ (хотя вопросы и ответы, связанные с PrimeFaces) содержит ценные ссылки, которые вы можете использовать.   -  person Kukeltje    schedule 15.06.2018
comment
В чем проблема с приведенным выше кодом, вы можете условно вызывать showPopup на основе логики проверки в методе showPopup_aug!   -  person Amr Gawish    schedule 28.06.2018


Ответы (2)


Итак, ваша цель здесь — открыть всплывающее окно программным способом. Почему вы получаете всплывающее окно с помощью JSFUtils? Вы можете привязать af:popup к вашему поддерживающему компоненту и использовать его. Вам не нужно использовать javascript.

private RichPopup myPopup ;//bound to the UI component

 public void showOrHidePopup(RichPopup popup,Boolean visible){
 if(visible){
 RichPopup.PopupHints hints = new RichPopup.PopupHints();
   myPopup.show(hints);
 }
 else{
  myPopup.hide();
 }

https://coderoar.blogspot.com/2018/08/oracle-adf-show-or-hide-popup.html

Поэтому выполните проверку в commandLink actionListener и вызовите этот метод внутри него.

Спасибо,

Прия

person Priya Darsini    schedule 02.08.2018

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

Если в action_listner вы вызываете showPopup_aug, то в showPopup_aug вызываете функцию проверки, которая возвращает true или false (логический тип данных)...

Что-то вроде этого.

    public boolean validateFields() {
      if()
        return true;
      else
        return false;
      }

В showPopup_aug,

       public void showPopup_aug(ActionEvent evt_popup) {
       if(validateFields())
       {
         showPopup(popup_aug);//defination given below
       }
       else
       {
                FacesMessage fm = new FacesMessage("Error Message");
                fm.setSeverity(FacesMessage.SEVERITY_ERROR);
                FacesContext fctx = FacesContext.getCurrentInstance();
                fctx.addMessage(null, fm);            
       }
     }

     public void showPopup(RichPopup popup) {
        RichPopup.PopupHints hint = new RichPopup.PopupHints();
        popup.show(hint);
     }

Надеюсь это поможет.

person YLG    schedule 13.08.2018