【问题标题】:Primefaces wizard. How to return js function tab for onnextPrimefaces 向导。如何为onnext返回js函数选项卡
【发布时间】:2013-02-08 12:47:05
【问题描述】:

我使用 Primefaces 3.5。并尝试在<p:wizard/> 的 onnext 处理程序中调用 js 函数。 我希望在验证结果ob当前选项卡后,onnext返回特定选项卡上的选项卡。我的验证函数

    function validateManageOtherTournaments(wizard, validationTab, lang) {
                var currentTabId = validationTab;
                if (currentTabId != 'competitionId') {
                    return wizard.next();
                }

                var seasonVal = document.getElementById('manageTournament:name_season_input').value;
                var dateFromVal = document.getElementById('manageTournament:dateFrom_input').value;
                var dateToVal = document.getElementById('manageTournament:dateTo_input').value;
                /*var compNameVal = document.getElementById('manageTournament:title_input').value;*/

                var isValidName = validateFieldsInOtherTournament('manageTournament', ['title'], lang);
                if (isValidName) {
                    if (validRuContentT) {
                        var filledBothDate = (dateFromVal != "" && dateToVal != "");
                        var isEmptySeason = ("" != String(seasonVal));
                        if ( filledBothDate || isEmptySeason) {
                            return wizard.next();
                        }
                    }
                }
                return "competitionId"; // currentTab
            } 

我使用代码js wizard。但是还是不行。(

//已更新

I try to do something like this

 function validateManageOtherTournaments(wizard, validationTab, lang) {
                /*var wizardElement = document.getElementById('wiz');*/

                var currentTabId = validationTab;
                if (currentTabId != 'competitionId') {
                    var currentStepIndex = wizard.getStepIndex(wizard.getState().currentStep),
                            stepIndexToGo = currentStepIndex + 1;
                    var stepIdToGo = wizard.cfg.steps[stepIndexToGo];
                    return wizard.loadStep(stepIdToGo, stepIndexToGo, false);        // next
                }

                var seasonVal = document.getElementById('manageTournament:name_season_input').value;
                var dateFromVal = document.getElementById('manageTournament:dateFrom_input').value;
                var dateToVal = document.getElementById('manageTournament:dateTo_input').value;
                /*var compNameVal = document.getElementById('manageTournament:title_input').value;*/

                var isValidName = validateFieldsInOtherTournament('manageTournament', ['title'], lang);
                if (isValidName) {
                    if (validRuContentT) {
                        var filledBothDate = (dateFromVal != "" && dateToVal != "");
                        var isEmptySeason = ("" != String(seasonVal));
                        if ( filledBothDate || isEmptySeason) {
                            var currentStepIndex = wizard.getStepIndex(wizard.getState().currentStep),
                                    stepIndexToGo = currentStepIndex + 1;
                            var stepIdToGo = wizard.cfg.steps[stepIndexToGo];
                            return wizard.loadStep(stepIdToGo, stepIndexToGo, false);         // next
                        }
                    }
                }
                var currentStepIndex = wizard.getStepIndex(this.getState().currentStep),
                stepIndexToGo = currentStepIndex;
                var stepIdToGo = wizard.cfg.steps[stepIndexToGo];
                return wizard.loadStep(stepIdToGo, stepIndexToGo, false);     //competitionId
            }

如何在向导的下一个功能选项卡中返回?

【问题讨论】:

  • 无法真正理解您的问题。是否要从 onnext 回调导航到特定选项卡?
  • @kolossus 是的,我想验证字段,如果结果正确,请导航到下一个选项卡,否则请留在当前选项卡上
  • 有什么特别的原因你不想在你的 backing bean 中做这个验证吗?

标签: java jsf jsf-2 primefaces wizard


【解决方案1】:

我做了这样的事情:

public String onFlowProcess(FlowEvent event)
{
  if (!event.getOldStep().equals("competitionId"))
  {
    return event.getNewStep();
  }
  if (validationPassed())
  {
    return event.getNewStep();
  }
  else
  {
    return event.getOldStep();
  }
}

private boolean validationPassed()
{
  // do your validation here.
  // return true if validation passed
}

然后在我的向导中:flowListener="#{myBean.onFlowProcess}"

【讨论】:

  • 这不需要将向导绑定到 bean(在您的代码中,向导仅用于获取当前选项卡)。您很可能需要使用 @ViewScoped bean。
  • 我做了类似@KidTempo 的操作,但是当验证失败并返回 event.getOldStep() 时,它会停留在页面上,但下一步按钮会消失。你知道会发生什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
相关资源
最近更新 更多