【问题标题】:Onstart is called after the listener method is executed监听方法执行后调用 onstart
【发布时间】:2014-10-06 04:36:52
【问题描述】:

为什么在监听器方法执行后会调用onstart? 在执行侦听器方法之前,我应该怎么做才能调用 onstart 方法? 使用 jsf 2.1 和 primefaces 4.0。

<p:ajax event="eventMove" listener="#{myBean.onEventMove}"
    update="mygrwlmsg" onstart="setLStorageDateToBean();"
    oncomplete="if(args.facesMessagesAvailable){handleEditEventRequest(args.eventList);scheduleWidget.update();}" />

通过remoteCommand调用一个bean方法

function setLStorageDateToBean()
{
    if(typeof(Storage)!=='undefined')
    {
        if((localStorage.startDate || localStorage.getItem('startDate') != null) 
            &amp;&amp; (localStorage.endDate || localStorage.getItem('endDate') != null))
        {
            var sDate = parseInt((localStorage.startDate)/1000);
            var eDate = parseInt((localStorage.endDate)/1000);
            var lCalRefresh = parseInt((localStorage.lastCalRefresh)/1000);

            setLocalStorageDate([{name:'startDate',value:sDate},{name:'endDate',value:eDate},{name:'lastCalRefresh',value:lCalRefresh}]);               
        }
    }
}

<p:remoteCommand name="setLocalStorageDate" actionListener="#{myBean.setDateFromLocaStorage}" >
</p:remoteCommand>

豆方法

public void setDateFromLocaStorage()
{
    int startDate = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("startDate"));
    int endDate = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("endDate"));
    int lCalRefresh = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("lastCalRefresh"));

    setlStorStartDate(startDate);
    setlStorEndDate(endDate);
    setlStorLastRefresh(lCalRefresh);       
}

【问题讨论】:

  • setLStorageDateToBean() 方法中有什么?

标签: ajax jsf primefaces


【解决方案1】:

找到了解决办法。 将ajax修改为(去掉监听器)

<p:ajax event="eventMove" 
    update="mygrwlmsg" onstart="callOnAjax();"
    oncomplete="if(args.facesMessagesAvailable)handleEditEventRequest(args.eventList); 
    scheduleWidget.update();}" />

创建一个新的 remoteCommand 组件

<p:remoteCommand name="myListener" actionListener="#{myBean.onEventMove}">
</p:remoteCommand>

创建了一个新的 javascript 函数

function callOnAjax(){
   setDateFromLocaStorage();
   myListener();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2011-08-30
    • 2012-01-25
    • 1970-01-01
    • 2012-08-30
    • 2019-10-17
    相关资源
    最近更新 更多