Jsf p:向导onnext不停止';导航';
当我使用p:wizard时,我为onnext属性使用一个自定义处理程序,该处理程序只是发出警报并返回false以测试行为 我从primefaces库中的wizard.js了解到,单击向导的“下一步”按钮时,应执行以下代码:Jsf p:向导onnext不停止';导航';,jsf,primefaces,wizard,Jsf,Primefaces,Wizard,当我使用p:wizard时,我为onnext属性使用一个自定义处理程序,该处理程序只是发出警报并返回false以测试行为 我从primefaces库中的wizard.js了解到,单击向导的“下一步”按钮时,应执行以下代码: next: function () { if (this.cfg.onnext) { var b = this.cfg.onnext.call(this); if (b == false) {
next: function () {
if (this.cfg.onnext) {
var b = this.cfg.onnext.call(this);
if (b == false) {
return
}
}
var a = this.cfg.steps[this.getStepIndex(this.currentStep) + 1];
this.loadStep(a, false)
}
我的理解是:向导首先执行自定义处理程序,如果自定义处理程序返回false,则不应加载下一个选项卡(调用PrimeFaces.widget.wizard.loadStep)。但实际情况是,自定义处理程序被称为,然后被称为向导的PrimeFaces.widget.Wizard.loadStep函数,因此下一个选项卡是焦点
我的理解是错误的,还是这是PF中的错误?只是做了一点检查,“顺序”是正确的,因此然后当您声明它没有错误时,问题是它无论如何被称为,,即使您(认为)返回false 问题是:
this.cfg.onnext.call(this);
它总是返回未定义的。它在5.3到5.1、5.0和4.0中都失败了,所以我一开始认为它要么从未经过全面测试,要么在最近的浏览器中有所改变。但实际情况是,我们定义的函数(在我的例子中是demo)被包装在一个匿名函数中
function (){demo()}
没有返回值,所以不是
function (){return demo()}
没有“return”会导致它永远不会返回从函数返回的实际值,而是始终“undefined”
这让我想到,在onnext=“demo()”
中只需添加返回。。。所以,让它onnext=“return demo()”
et瞧,它能工作
请记住,这很容易使用javascript调试器进行调试,并且您始终可以重写函数以添加其他日志语句
我用以下代码进行了测试:
<html xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<h:head />
<h:body>
<h:form id="form">
<p:wizard onnext="demo()" flowListener="#{mailTemplateBean.onFlowProcess}">
<p:tab title="Step 1"/>
<p:tab title="Step 2"/>
<p:tab title="Step 3"/>
<p:tab title="Step 4"/>
</p:wizard>
<script>
PrimeFaces.widget.Wizard.prototype.next = function() {
if(this.cfg.onnext) {
var value = this.cfg.onnext.call(this);
console.log("Return: " + value + " function: " + this.cfg.onnext);
if(value === false) {
return;
}
}
var targetStepIndex = this.getStepIndex(this.currentStep) + 1;
if(targetStepIndex < this.cfg.steps.length) {
var stepToGo = this.cfg.steps[targetStepIndex];
this.loadStep(stepToGo, false);
}
}
function demo() {
var bla = confirm("Sure?");
console.log("Choosen: " + bla);
return bla;
}</script>
</h:form>
</h:body>
</html>
PrimeFaces.widget.Wizard.prototype.next=函数(){
if(this.cfg.onnext){
var value=this.cfg.onnext.call(this);
log(“返回:+value+”函数:+this.cfg.onnext);
如果(值===false){
返回;
}
}
var targetStepIndex=this.getStepIndex(this.currentStep)+1;
if(targetStepIndex this.cfg.steps.length){
var stepToGo=this.cfg.steps[targetStepIndex];
此.loadStep(stepToGo,false);
}
}
函数demo(){
var bla=确认(“确定?”);
console.log(“Choosen:+bla”);
返回bla;
}
请向PF提交一个问题,并要求他们将其添加到文档中,或者让他们修复其中的“包装”功能,添加automagic return。PF版本?否则我可能是在追逐鬼魂,试图复制我使用的是Primefaces 5.2Tanks Kukeltje,这提供了信息,非常有用。你的工作也很有帮助。我会向PF问题追踪者报告。