Хотите проверить, не соблюдает ли элемент управления rest service context.getSubmittedValue () для свойства viewName? Имя представления службы REST не вычисляется при выполнении частичного обновления на родительской панели. Я пытаюсь загрузить разные представления (DataTable используется для отображения), и мне нужно работать с объектом JSON. Однако, когда я нажимаю на запись аккордеона, которая обновляет панель в другом настраиваемом элементе управления, я вижу, что отправленное значение изменяется с использованием вычисляемого поля, но мой служебный элемент управления REST по-прежнему будет возвращать старые данные. Вот код, который вы хотите посмотреть:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:panel id="panelMiddle">
        <xp:text escape="true" id="computedField1" value="#{javascript:context.getSubmittedValue()}"></xp:text>

        <xe:restService id="restService1" pathInfo="data" preventDojoStore="true" state="false">
            <xe:this.service>
                <xe:viewItemFileService defaultColumns="true" contentType="application/json" compact="true" systemColumns="0">
                    <xe:this.viewName><![CDATA[#{javascript:var v = context.getSubmittedValue();
if (null == v){
    v = application.getString("defaultView");
}
}]]></xe:this.viewName>
                    <xe:this.count><![CDATA[#{javascript:
var v = context.getSubmittedValue();
if (null == v){
    v = application.getString("defaultView");
}
database.getView(v).getEntryCount();
}]]></xe:this.count>
                </xe:viewItemFileService>
            </xe:this.service>
        </xe:restService>
        <div id="demo"></div>
        <xp:eventHandler event="onClientLoad" submit="false">
            <xp:this.script><![CDATA[$(document).ready(function() {
    $.ajax({
        url:"New.xsp/data",
        dataType:"json",
        success:
            function(data){
                var colHeaders = [];
                var tarr = [];
                $.each(data.items[0], function (key, val) {
                    if(key.indexOf("@")==-1){
                        colHeaders.push({"title":key});
                        //colHeaders.push({"data":key});
                    }
                });
                $.each(data.items,function(v,i){
                    var temp = [];
                    $.each(i,function(k,vv){
                        if(k.indexOf("@")==-1){temp.push(vv)};
                    })
                    tarr.push(temp);
                })  
                $('#demo').html( '<table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered table-hover" id="example"></table>' );

                $('#example').DataTable( {
                    "data": tarr,
                    "columns": colHeaders
                } );  
            }

    });

});]]></xp:this.script>
        </xp:eventHandler>
    </xp:panel>
</xp:view>
0
Arun 28 Май 2015 в 12:43

1 ответ

Лучший ответ

После долгих испытаний с переменными области видимости и вычисляемыми полями выяснилось, что в этом сценарии работает только sessionScope. Не уверен, что это идеальное решение, поскольку люди могут открывать более одной вкладки в браузере, что может вызвать конфликты. Идеи приветствуются.

0
Arun 29 Май 2015 в 11:50