Как отобразить пользовательское сообщение, когда кто-то нажимает на кнопку обновления Coldfusion cfGrid (когда сессия завершена)? - PullRequest
0 голосов
/ 31 января 2012

Я использую Coldfusion (9.0.1) cfGrid для заполнения некоторых данных. Код указан ниже

   <cfform id="ViewNewCustomerReport" name="ViewNewCustomerReport">
    <div class="buttonClass">
        <cfinput type="button" id="generateReport" name="generateReport" 
        value="Generate Report" />

        <cfinput type="hidden" name="filters" id="filters" 
        bind="javascript:GenerateReport({generateReport@click})"/>
    </div>
    <br/>
    <div id="gridContainer">
    <cfgrid name="NewCustomerReport" autoWidth="Yes" colheaderbold="true"  selectonload="false" width="710"
    bind="url:index.cfm?fuseaction=ReportsCommon.GetNewCustomerReport&page={cfgridpage}&pagesize={cfgridpagesize}&gridsortcolumn={cfgridsortcolumn}&gridsortDirection={cfgridsortdirection}&filter={filters}"
    bindOnLoad="false" striperows="true" striperowcolor="##F6F6F6" format="html" pagesize="10">
        <cfgridcolumn name="COMPANY_NAME" width="280" header="Company Name" />
        <cfgridcolumn name="SUBJECT_ASSIGNED" width="280" header="Subject Assigned" />
        <cfgridcolumn name="NO_OF_USERS" header="No. Of users" width="180" /> 
    </cfgrid>
    </div>
    <div id="wrapperDiv"><label id="lblError" class="CustomError"></label></div>
</cfform>

И это часть JavaScript

var GenerateReport = function(filters){
    var returnVal;
    var checkForm = $('#ViewNewCustomerReport').validationEngine('validate');
    returnVal = dateFrom + '|' + dateTo;
    if(checkForm)
    {
        var gridObject = ColdFusion.Grid.getGridObject("NewCustomerReport");
        var store = gridObject.getStore();
        store.addListener("load",function(){
            if(store.data.items == 0)
            {
                gridObject.setVisible(false);
                $("#gridContainer").hide();
                $("#wrapperDiv").show();
                $("#wrapperDiv").css("text-align","center");
                $("#lblError").text("No record found").css({"font-size":"20px","font-weight":"normal"});
            }   
            else
            {
                gridObject.setVisible(true);
                $("#gridContainer").show();
                $("#wrapperDiv").hide();    
            }
        });             
    }
    else
    {
        $('#gridContainer').hide();         
    }
    return  returnVal;  
};

Теперь, если кто-то выйдет из приложения на другой вкладке, а затем обновит сетку, он покажет какое-то сообщение, например

CFGRID: TOTALROWCOUNT отсутствует в данных ответов [Включите отладку, добавив 'cfdebug' к параметрам URL-адреса, чтобы увидеть больше информации]

Когда сеанс возвращается взамен, данные Json собираются так {"isSessionOut": true} Код состояния HTTP 200 Статус сообщения HTTP OK

Таким образом, вместо того, чтобы показывать это сообщение об ошибке по умолчанию, я хочу показать свое пользовательское сообщение, например сеанс завершен, пожалуйста, войдите, чтобы продолжить .

как это может быть достигнуто ?? Заранее спасибо ......

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Каждая операция связывания / Ajax-вызов в coldfusion имеет функцию-обработчик OnError / BindError, которую можно вызывать во время какой-либо ошибки, или мы можем вызвать ее с помощью ответа HTTP, установив код состояния HTTP.

Всякий раз, когда вы хотите получить сообщение об ошибке, сгенерированное самостоятельно, вы можете написать этот код на странице ответа / действия вашего сайта:

error = getpagecontext().getresponse().setstatus(306, "Your session is out");

(вы можете установить код состояния HTTP любымвещь более 300, но я проверил только 306, и это работает)

этим вы можете вызвать функцию onError вашего CFGRID

0 голосов
/ 31 января 2012

Я бы использовал jQuery или подобный плагин, который запускается на внешней странице и обнаруживает неактивность, затем он может даже отсчитывать время, когда сеанс истекает, и грациозно возвращать вашего пользователя на страницу входа. Таким образом, у вас не будет этой проблемы на любой странице.

Это хорошо, есть и много других jsFiddle

...