我有一个相当简单的用例,
我有一个搜索表单和一个Grid
网格假设在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>
答案 0 :(得分:1)
简单地不使用onSuccessTopics它们仅在成功的AJAX调用之后发布。您的提交按钮中未定义Shich。
在此用例中使用onClickTopics。
答案 1 :(得分:1)
为了对SJQ网格进行ajax调用,set datatype ="local"
删除了href。
在您的按钮中,使用必要的数据调用以下函数来重新加载网格:
var allParameters = $("#gridId").jqGrid("getGridParam");
allParameters .data = myData;
$("#gridId").trigger('reloadGrid');
在上述功能中,gridId
在您的情况下为gridtable
。如果要添加行,可以调用以下函数:
$("#gridId").jqGrid('setGridParam', {
data: myData
}).trigger("reloadGrid");