0

我在示例应用程序的任务流导航中遇到问题。我创建了一个包含三个视图和方法的简单任务流,如下所示。在此处输入图像描述

在登录提交按钮单击时,我正在调用托管 bean 方法“checkInput”,它检查用户详细信息并导航到指定的 jspx 页面,即。该方法返回适当的“管理员”或“用户”以导航到任务流中的下一个视图。直到它工作正常。

我的情况是我不想单击任何按钮,在文本字段中输入值并按“Enter”后,我想导航到下一个视图。为此,我创建了 clientListener 和 serverListener 并能够调用 serverListener 方法并实现了流程两种方式导航

1)调用如下链接中所述的导航处理程序:http: //adfpractice-fedor.blogspot.in/2012/02/handling-key-modifiers-for-client.html

    public void checkEnterEvent(ClientEvent clientEvent) {
    HandleNavigation(clientEvent.getParameters().get("fvalue").toString());<-- passing parameter here
    //  HandleNavigation("admin");     <--even i hardcoded here for once
    }

    private  void HandleNavigation(String outcome) {  
     System.out.println("IN HandleNavigation");
      FacesContext context = FacesContext.getCurrentInstance();
       NavigationHandler nh = context.getApplication().getNavigationHandler();
         System.out.println(outcome);
         nh.handleNavigation(context, null, outcome);
    }

它不起作用,而且这个解决方案绕过了 jsf 生命周期,所以我实现了这个:

2)第二种方式:

  public void checkEnterEvent(ClientEvent clientEvent) {
    navigateByQueueAction();  
  }

  private void navigateByQueueAction() {
   FacesContext fctx = FacesContext.getCurrentInstance();
   UIViewRoot root = fctx.getViewRoot();
   //client Id of button includes naming container like id of region. 
   RichCommandButton button = 
       (RichCommandButton) root.findComponent("cb6");
   ActionEvent actionEvent = new ActionEvent(button);
   actionEvent.queue();
   }

其中“cb6”是 jspx 文件中的命令按钮 ID <af:commandButton text="submit" action="check" id="cb6" visible="false">

但它们都不起作用。

有人可以告诉我的代码有什么问题吗?

4

1 回答 1

0

在上述场景中,我忽略了第一个,因为它具有绕过 JSF 生命周期等缺点。来到第二个视图,我可以通过以编程方式对按钮操作进行排队,通过单击输入文本上的输入来调用第二个视图。理论上我不知道它是如何解决问题的,我相信 SO(ADF) 爱好者会很高兴听到 ADF 专家的意见。

正如您在 jspx 文件中的 javascript 代码中看到的(注释最右边),我将 AdfCustomEvent.queue() 方法的“立即”属性更改为 true,它解决了我的问题。

<af:resource type="javascript">
function handleEnterEvent(evt) {        
              var _keyCode = evt.getKeyCode();
              //check for Enter Key
             if (_keyCode == AdfKeyStroke.ENTER_KEY ){          
                var comp = evt.getSource();
                var id=AdfPage.PAGE.findComponentByAbsoluteId('d1');
                AdfCustomEvent.queue(id, "EnterEvent",{fvalue:comp.getSubmittedValue()},true); <-- changed from false to true.
                evt.cancel();
         }
      }
</af:resource>

<af:serverListener type="keyboardToServerNotify"
                     method="#{backingBeanScope.JJS.handleKeyboardEvent}"/>

PS:我愿意接受建议。

谢谢

于 2014-05-22T13:22:44.440 回答