繁体   English   中英

在JSF中完成bean方法后如何执行javascript函数

[英]How to execute javascript function after bean method is finished in JSF

我想在相关动作被触发并且相关bean方法完成之后调用javascript函数。 我在问题中看到了一些相关内容- 在ajax调用<f:ajax>之后 ,过程onclick函数 ,因此我使用了f:ajax的onevent处理函数。

触发id为plnHiddenBtn的commandButton后,将调用bean的“ prepareTempPlan”方法。 在“ prepareTempPlan”的过程中,我可以看到,当“ data.status ”为“ complete ”时,数据成功地从DB中获取并成功包含在变量“ specDates”中。

但是, “ specDates”上的对象无法通过commandButton的第一次单击从bean传递到客户端 第一次单击命令按钮后,我刷新页面。 当我第二次单击按钮时,终于可以从Bean中获取对象了。 我可以通过.js文件的“ updateCalendar”方法中的警报消息-alert(dates)来检查是否通过了Bean中的对象。

触发commandButton的动作并完成相关的bean方法后,如何获取对象?

感谢所有反馈!

.xhtml文件;

<input jsfc="h:commandButton" id="plnHiddenBtn" class="hiddenBtn"  action="#planCalendarFacade.prepareTempPlan}">
    <f:ajax execute="mainForm" onevent="updateAddedDayPlns" render="plnName" />
</input>
<h:inputHidden id="specDates" value="#{planCalendarFacade.specDates}"/>

.js文件;

function updateAddedDayPlns(data){

    var status = data.status; // Can be "begin", "complete" or "success".

    switch (status) {
        case "begin": // Before the ajax request is sent.
            alert("begin");
            break;

        case "complete": // After the ajax response is arrived.
            alert("complete");
            break;

        case "success": // After update of HTML DOM based on ajax response..
            alert("success");
            $('.addedDayPlnLst li:first').addClass('ui-selected');
            updateCalendar();  //<-THIS IS IMPORTANT->
            dayPlnInd = 0;
            break;
        }
}
function updateCalendar(){

    var dates = document.getElementById('mainForm:specDates').value;
    dates = JSON.parse(dates);
    alert(dates);
}

豆文件;

public class PlanCalendarFacade {
...
private Object specDates = new String("hello");
...

public void prepareTempPlan() {

    Plan plan = null;

    // Find the plan based on specific plan-id (slctdPlnId).
    for (int i = 0; i < plans.size(); i++)
        if ( plans.get(i).getPLAN_ID() == slctdPlnId )
            plan = plans.get(i);

    if (plan == null){
        // For "add user group" operation,
        tempPlan = new Plan();
        newRecFlag = false;
    }else{
        // For "update and delete user group" operations.
        tempPlan = plan;
        newRecFlag = true;
        getSpecificDayPlansFromDB(plan.getPLAN_ID());
        getAllDatesFromDB();
    }
}

编辑:

  • 我修剪了一些代码以便于阅读。

  • 我正在等待您的建议,我在这个问题上感到困惑!

Yon还需要render您的specDates字段,以便从调用中更新客户端变量。

<input jsfc="h:commandButton" id="plnHiddenBtn" class="hiddenBtn"  action="#planCalendarFacade.prepareTempPlan}">
    <f:ajax execute="mainForm" onevent="updateAddedDayPlns" render="specDates" /> //Also could render multiple fields, if needed...
</input>
<h:inputHidden id="specDates" value="#{planCalendarFacade.specDates}"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM