Перезагрузка данных Struts2 jquery Grid ajax при отправке формы

У меня есть довольно простой вариант использования, в котором

У меня есть форма поиска и сетка

Сетка должна отображать некоторые результаты по умолчанию в loadSearch.action.

Когда пользователь вводит несколько критериев в форму поиска и нажимает кнопку «Отправить», результаты ajax должны быть перезагружены в сетке ниже.

Я получаю результаты через почтовый ответ, но не могу показать их внутри сетки.

Вот мой код

    <%@ taglib prefix="s" uri="/struts-tags"%><%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

    <%@ taglib prefix="sj" uri="/struts-jquery-tags"%>

    <%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags"%>

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

    <title>Search Patient</title>

    <sj:head jqueryui="true"/> 

    </head>

    <body>

    <s:form id="form" action="search"  theme="simple" namespace="/patient/register" cssClass="yform">

    <div>

    <table>

    <tr>

    <td>

    <s:text name="global.fname"></s:text>

    </td>

    <td>

    <sj:textfield name="firstName"></sj:textfield>

    </td>

    </tr>

    <tr>

    <td>

    <s:text name="global.lname"></s:text>

    </td>

    <td>


    <sj:textfield name="lastName"></sj:textfield>
        </td>

    </tr>

    </table>

    <div>

    <sj:a onSuccessTopics="reloadGrid" button="true">Search</sj:a>

    </div>

    </div>

    </s:form>


    <div>

    <div id="searchResults">

    <sjg:grid id="gridtable" caption="Customer Examples"
            pager="true" dataType="json" reloadTopics="reloadGrid" formIds="form"
            gridModel="patients" rowList="10,15,20" rowNum="15" loadonce="true" 
            href="%{search}"
            rownumbers="true">

    <sjg:gridColumn name="userId" index="userID" title="Id"
                sortable="true" />

    <sjg:gridColumn name="firstName" index="firstName" title="Name"
                sortable="true" />

    </sjg:grid>

    </div>

    </div>

    </body>

    </html>

Сопоставления XML

    <action name="loadSearch" class="com.cursive.eclinic.action.PatientAction" method="loadSearch">
        <interceptor-ref name="userAgentInterceptor" />
        <result name="success">search.jsp</result>
        <result name="error">/commons/exception.jsp</result>
    </action>

    <action name="search" class="com.cursive.eclinic.action.PatientAction" method="search">
        <interceptor-ref name="exception"></interceptor-ref>
        <interceptor-ref name="prepare"></interceptor-ref>
        <interceptor-ref name="modelDriven"></interceptor-ref>
        <interceptor-ref name="params"></interceptor-ref>
        <interceptor-ref name="userAgentInterceptor" />
        <result name="success" type="json">
            <param name="includeProperties">
                ^patients\[\d+\]\.userId,
                ^patients\[\d+\]\.firstName,
            </param>
        </result>
    </action>

person Amol Ghotankar    schedule 22.01.2013    source источник


Ответы (2)


Просто не используйте onSuccessTopics, они публикуются только после успешного вызова AJAX. Shich не определен в вашей кнопке отправки.

В этом случае используйте onClickTopics.

person Johannes    schedule 24.01.2013
comment
Не могли бы вы порадовать меня аналогичной проблемой stackoverflow.com/questions/18684370/ здесь. - person Amol Ghotankar; 09.09.2013

  1. Чтобы сделать ajax-вызов сетки SJQ, set datatype ="local" удалите ссылку href.

  2. В вашей кнопке вызовите функцию ниже с необходимыми данными для перезагрузки сетки:

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

В приведенной выше функции gridId в вашем случае равно gridtable. Если вы хотите добавить строку, вы можете вызвать функцию ниже:

 $("#gridId").jqGrid('setGridParam', {
                        data: myData
                    }).trigger("reloadGrid");
person madhu pathy    schedule 12.02.2015