С edittype select и множеством true, поле выбора не загружает данные - PullRequest
2 голосов
/ 05 августа 2011

У меня есть поле выбора в jqGrid и для загрузки данных m, используя dataUrl.Все работает нормально, но когда я ставлю multiple как true, тогда данные не отображаются в сетке, а в консоли выводятся данные.Гуглил много но не смог найти решение.

$(document).ready(function () {
    var lastsel;
    var skip = 0;
    jQuery("#list").jqGrid({
        url: 'SomeActionClass.do?option=LOAD',
        datatype: "json",
        colNames: [],
        colModel: [
            { name: 'generalised_skill_id', index: 'generalised_skill_id',
                width: 120, formoptions: { rowpos: 2, colpos: 1 },
                editable: true, edittype: "select",
                editoptions: {
                    dataEvents: [
                        {
                            type: 'change',
                            fn: function (e) {
                                var Value = $(this).val();
                                if (Value == "CreateNew") {
                                    addSkill(Value);
                                }
                            }
                        }],
                    dataUrl: 'PopulatePrimarySkillData.do?nd=' + Math.random()
                }
            },
            { name: 'primary_skill_ids', index: 'primary_skill_ids', width: 120,
                formoptions: { rowpos: 2, colpos: 2 },
                editable: true, editrules: { required: true }, edittype: "select",
                editoptions: {
                    dataEvents: [
                        {
                            type: 'change',
                            fn: function (e) {
                                var Value = $(this).val();
                                if (Value == "CreateNew") {
                                    addSkill(Value);
                                }
                            }
                        }],
                        value: "", multiple: true, size: 3,
                    dataUrl: 'PopulatePrimarySkillData.do?nd=' + Math.random()
                }
            },
        ],
        rowNum: 25,
        rowList: [25, 50, 75, 100],
        pager: '#pager',
        rowTotal: 10000,
        sortname: 'rgs_id',
        viewrecords: true,
        height: 600,
        sortorder: "asc",
        multiselect: true,
        mtype: "POST",
        gridview: true,
        ignoreCase: true,
        loadonce: true,
        loadComplete: function () {
            $('#list').setGridParam({ datatype: "json" });
            $('#list').trigger("filterToolbar");
            $('#list').trigger("reloadGrid");
        },
        ondblClickRow: function (id) {
            if (id && id !== lastsel) {
                data = jQuery('#list').getRowData(id);
                var str = data['status'];
                if (str == "Fulfilled" || str == "Canceled") {
                    alert('Fulfilled and Cancelled demands can not be edited');
                } else {
                    jQuery('#list').jqGrid('restoreRow', lastsel);
                    jQuery('#list').jqGrid('editRow', id, true, pickdates);
                    lastsel = id;
                }
            }
        },
        editurl: 'SomeActionClass.do?option=EDITorADD'
    });
});

Для обобщенного навыка - загрузка поля выбора, но для основного навыка - ничего не загрузка.Однако, если я удаляю multiple:true из основного навыка, он загружает данные.

Любая помощь будет принята с благодарностью.

Ниже приведен мой класс PopulatePrimarySkillData.

    // In this function query to fetch all the skills from database is written.
    ArrayList primarySkillList = fetchPrimarySkills();
    StringBuilder htmlSelectString = new StringBuilder("<select> ");
    for (int i = 0; i < primarySkillList.size(); i++) {
        SkillsetBean sb = (SkillsetBean) primarySkillList.get(i);
        htmlSelectString.append("<option value='");
        htmlSelectString.append(sb.getPrimarySkillId());
        htmlSelectString.append("'>");
        htmlSelectString.append(sb.getPrimarySkillDesc());
        htmlSelectString.append("</option>");
    }
    htmlSelectString
            .append("<option value='CreateNew'>Create New</option> ");
    htmlSelectString.append("</select> ");
    PrintWriter out = response.getWriter();
    System.out.println("The SELECT String is : "
            + htmlSelectString.toString());
    out.println(htmlSelectString.toString());
    return null;

Эта функция выводит на консоль следующий результат:

 <select> <option value='1'>.Net</option>
<option value='2'>Appl packaging</option>
<option value='3'>BOXI</option>
<option value='4'>Business Analyst</option>
<option value='5'>C++</option>
<option value='6'>CNG</option>
<option value='7'>DB2</option>
<option value='8'>Flash</option>
<option value='9'>IIS Admin</option>
<option value='10'>Informatica</option>
<option value='11'>Java / J2EE</option>
<option value='12'>Java Flex</option>
<option value='13'>MS Access</option>
<option value='14'>Mainframe</option>
<option value='15'>NAT/ADABAS</option>
<option value='16'>Oracle</option>
<option value='17'>Oracle DBA</option>
<option value='18'>Others</option>
</select> 

Я думаю, что на стороне сервера нет проблем, поскольку при удалении данных «несколько: истина» данные загружаются.

Вотобразец данных JSON.Я надеюсь, что это полезно.

{"id":"166","cell":["Business Analyst","BOXI,C++"]}
{"id":"167","cell":["C++",".Net,C++"]}
{"id":"168","cell":[".Net",".Net,CNG"]}
{"id":"169","cell":["Business Analyst","Appl packaging,Business Analyst"]}
{"id":"170","cell":["Business Analyst,C++","CICS,Cobol"]}
{"id":"171","cell":[,"Appl packaging",".Net,Business Analyst"]}
{"id":"172","cell":["CNG","BOXI,Appl packaging"]}
{"id":"173","cell":["Business Analyst","Business Analyst,BOXI"]}

1 Ответ

4 голосов
/ 05 августа 2011

У вас есть часть проблем (ошибки jqGrid), которые я описал в ответе и которые я опубликовал как отчет об ошибке для разработчика jqGrid. Ошибки по-прежнему не исправлены, поэтому вы пытаетесь воспроизвести вашу проблему в Internet Explorer , демоверсию :

enter image description here

Я использовал IE9 для теста. Если вы исправите строку 8217 jquery.jqGrid.src.js (версия 4.1.2) из ​​

if(cm[i].edittype == "select" && cm[i].editoptions.multiple===true && $.browser.msie) {

до

if(cm[i].edittype === "select" && typeof(cm[i].editoptions)!=="undefined" && cm[i].editoptions.multiple===true && typeof(cm[i].editoptions.dataUrl)==="undefined" && $.browser.msie) {

проблема будет исправлена ​​и у вас будет

enter image description here

(см. ту же демонстрацию , но в которой используется фиксированная jquery.jqGrid.src.js).

Более того, я написал вам в комментарии, что попытка сгенерировать уникальный URL используется в dataUrl с

dataUrl: 'PopulatePrimarySkillData.do?nd=' + Math.random()

генерировать один url как

PopulatePrimarySkillData.do?nd=0.30184902572188804 

Если вы используете dataUrl: 'PopulatePrimarySkillData.do и будете использовать дополнительный параметр ajaxSelectOptions: { cache: false }, dataUrl, который будет использоваться, будет действительно уникальным, как

PopulatePrimarySkillData.do?_=1312564872215
PopulatePrimarySkillData.do?_=1312564872217 
PopulatePrimarySkillData.do?_=1312564891288
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...