我正面临示例应用程序的任务流导航中的问题。我创建了一个简单的Taskflow,其中包含三个视图和方法,如下所示。
在登录提交按钮时单击我正在调用托管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">
但它们都不起作用。
有人能告诉我的代码有什么问题吗?
答案 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:我愿意接受建议。
由于