任务流中的导航问题

时间:2014-05-08 10:40:26

标签: navigation oracle-adf adf-task-flow

我正面临示例应用程序的任务流导航中的问题。我创建了一个简单的Taskflow,其中包含三个视图和方法,如下所示。enter image description here

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

我的情况是我不想点击任何按钮,在文本字段中输入值并按“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">

但它们都不起作用。

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

1 个答案:

答案 0 :(得分:0)

在上面的场景中,我忽略了第一个,因为它有绕过JSF生命周期的缺点。来到第二个,我可以通过以编程方式排队n按钮动作来单击输入文本上的输入来调用secound视图。从理论上讲,我不知道它是如何解决这个问题的,我确信SO(ADF)爱好者很乐意听到ADF专家的意见。

正如你在jspx文件中的javascript代码中看到的那样(最右边的评论),我将AdfCustomEvent.queue()方法的“immediate”属性更改为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:我愿意接受建议。

由于