【发布时间】:2014-04-16 09:28:33
【问题描述】:
我目前有一个表,我正在尝试将其转换为 jqGrid。我无法获得请求以获取 JSON 结果的控制器操作。
这是我的相关 Maven 配置:
<!-- Struts2 Libraries -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>com.jgeppert.struts2.jquery</groupId>
<artifactId>struts2-jquery-plugin</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.jgeppert.struts2.jquery</groupId>
<artifactId>struts2-jquery-grid-plugin</artifactId>
<version>3.1.0</version>
</dependency>
这是我的struts.xml 配置:
<package name="opd" extends="struts-default,json-default" namespace="/">
<!-- ============================================== -->
<!-- Result Types -->
<!-- ============================================== -->
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
<result-type name="json" class="org.apache.struts2.json.JSONResult" />
</result-types>
<!-- ============================================== -->
<!-- Interceptors -->
<!-- ============================================== -->
<interceptors>
<interceptor name="appInterceptor" class="com.OrthoPatientDirect.OPDWeb.interceptor.ApplicationInterceptor" />
....
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>
....
<package name="admin" namespace="/admin" extends="opd">
<!-- ============================================== -->
<!-- Admin Manage Patient -->
<!-- ============================================== -->
<action name="patients_*" class="com.OrthoPatientDirect.OPDWeb.action.ManagePatientAction" method="{1}">
<result name="listHome" type="tiles">admin.managePatientList</result>
<result name="listByProcedure" type="tiles">admin.managePatientList.Procedure</result>
<result name="update" type="tiles">admin.managePatientList</result>
<result name="deletePatient" type="tiles">admin.managePatientList</result>
<result name="getJsonData" type="json" />
<interceptor-ref name="appInterceptor"/>
<interceptor-ref name="paramsPrepareParamsStack" />
<interceptor-ref name="json" />
</action>
....
这是我的控制器和动作。我省略了其他 jQuery 特定属性。我没有使用注释。填充数据的选项卡还会调用其他操作。
public String getJSON()
{
return getJsonData();
}
public String getJsonData()
{
//Count Rows
records = getPatientList().size();
//calculate the total pages for the query
total = records;
return "getJsonData";
}
这是我对 jqGrid 的看法:
<%@taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags"%>
<sj:head jqueryui="true"/>
<s:url var="remoteurl" action="patients_getJsonData"/>
<sjg:grid
id="gridtable"
caption="View Patients"
dataType="json"
href="%{remoteurl}"
pager="true"
gridModel="patientList"
rowList="10,15,20"
rowNum="15"
rownumbers="true"
>
<sjg:gridColumn name="email" index="email" title="Email" sortable="true"/>
</sjg:grid>
我愿意接受任何建议。没有不好的答案。我知道 SO 中还有其他与此相关的问题,但我只找到了使用注释的问题或没有任何答案的问题。这可能/可能不是版本问题。前几天我尝试升级,但遇到了与其他库的冲突。
【问题讨论】:
-
1) 请始终为 jquery 和 jquery 网格插件使用相同的版本。当前版本是 3.7.0。 2) 是否调用了 JSON 操作或是否有任何 JavaScript 错误?
-
哇,真是个整洁的混乱 :) 通配符方法以 get 返回自己作为结果 O_o 顺便说一句,由于非常重要的安全问题,您应该升级 ALSO。对于 Struts(核心、json 等),您应该在任何地方使用 2.3.16,对于 Jquery AND grid,应该使用 3.7.0。
-
但是您不能将 3.7.0 与 2.2.1 一起使用,并且最新的 S2 是 2.3.16.1。 :)
-
我会尝试升级。遇到问题。有没有办法查看旧版本的 Struts Jquery Grid 文档是什么样的?
-
我使用的是 spring 的 3.0.3Release 版本。大家都用什么版本?希望我不必升级到版本 4。这不是让 jquery 网格正常工作的好解决方案。
标签: java jquery json struts2 jqgrid