0

У меня есть довольно простой случай использования, в котором,Struts2 JQuery сетка перезарядка Аякса данные по форме представить

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

Сетка предполагает, чтобы показать некоторые результаты по умолчанию на loadSearch. действие.

Когда пользователь вводит несколько критериев в форме поиска и нажимает кнопку отправки, то результаты 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> 

ответ

1

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

Использовать onClickTopics в этом прецеденте.

+0

Не могли бы вы мне с подобным вопросом http://stackoverflow.com/questions/18684370/struts2-jquery-ajax-and-client-side -валютно-не-рабочий-тогтер здесь. –

1
  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");