Struts 2 jQuery grid загружает данные из строки JSON

Я обнаружил, что мы можем загрузить jqGird со строкой JSON. Пожалуйста, обратитесь к карте данных JSON в jqGrid

Можно ли использовать эту функцию с sjg:grid тег.

Я смотрю на атрибут tag и обнаруживаю, что данные могут быть загружены с URL-адреса, который вызовет действие Struts, и это действие возвращает данные JSON, но в моей программе у меня уже есть значение JSON, и мне нужно передать его в jqGird.

Если тег не поддерживает данные, как лучше всего использовать jqGrid, который включен в плагин Struts 2 jQuery.

2 ответа

Решение

Установить dataType="local" к sjg:grid и удалить href приписывать. Затем предоставьте данные строки из массива. Например

<sjg:grid
    id="gridtable"
    caption="Example (Editable/Multiselect)"
    dataType="local"
    pager="true"
    navigator="true"
    navigatorSearchOptions="{sopt:['eq','ne','lt','gt']}"
    navigatorAddOptions="{height:280, width:500, reloadAfterSubmit:true}"
    navigatorEditOptions="{height:280, width:500, reloadAfterSubmit:false}"
    navigatorEdit="true"
    navigatorView="true"
    navigatorViewOptions="{height:280, width:500}"
    navigatorDelete="true"
    navigatorDeleteOptions="{height:280, width:500,reloadAfterSubmit:true}"
    gridModel="gridModel"
    rowList="5,10,15"
    rowNum="5"
    rownumbers="true"
    editurl="%{editurl}"
    editinline="true"
    multiselect="true"
    onSelectRowTopics="rowselect"
    >

    <sjg:gridColumn name="id" index="id" title="Id" formatter="integer" editable="false" sortable="true" search="true" sorttype="integer" searchoptions="{sopt:['eq','ne','lt','gt']}"/>
    <sjg:gridColumn name="name" index="name" key="true" title="Country Name" editable="true" edittype="text" sortable="true" search="true" sorttype="text"/>

</sjg:grid>
<script type="text/javascript">
  $(document).ready(function(){
    var mydata = [{id:"1",name:"Roman C"}];
    //for(var i=0;i<=mydata.length;i++) $("#gridtable").jqGrid('addRowData',i+1,mydata[i]);
    $("#gridtable").jqGrid('setGridParam', {
        data: mydata
    }).trigger("reloadGrid");
  });
</script>

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

            var allParameters = $("#gridtable").jqGrid("getGridParam");
                        allParameters.data = myData;
                        $("#gridtable").trigger('reloadGrid');

Вместо:

      $("#gridtable").jqGrid('setGridParam', {
                            data: mydata
                        }).trigger("reloadGrid");

Также, если вы хотите сделать ajax призыв к действию, получить список и проанализировать его, чтобы добавить в myData. Проверь это:

  $.ajax({
            url: "myAction.action", cache: false, dataType: 'json', data: "employeeId=" +
                    employeeIdList,
            success: function (data) {
                var jsonData = JSON.stringify(data.jsonResponse);
                var parsedData = JSON.parse(jsonData);
                if (parsedData.hasResults) {
                    var myData = parsedData.jsonResults;
                    $(document).ready(function () {
                        var allParameters = $("#gridtable").jqGrid("getGridParam");
                        allParameters.data = myData;
                        $("#gridtable").trigger('reloadGrid');

                    });
                }
            } });
Другие вопросы по тегам