我正在尝试在我的应用程序中实现struts2-jquery网格标记,但我不熟悉JSON,所以在这个过程中遇到一些麻烦...... 有什么问题?
原始示例在操作类 @Result(name =“success”,type =“json”)上使用注释,但我使用的是xml配置:
<package name="default" namespace="/" extends="struts-default">
...
</package>
<package name="showcase" extends="struts-default, json-default" namespace="/">
<action name="jgrid" class="com.user.action.GridDataProvider" method="execute" > //line 106
<result name="success" type="json">/tabs.jsp</result>//line 107
</action>
</package>
结果
Unable to load configuration. - action -
file:/C:/struts2worksp/Struts2HiberQuize_4/target/classes/struts.xml:106:84
... Caused by: Unable to load configuration. - action -
file:/C:/struts2worksp/Struts2HiberQuize_4/target/classes/struts.xml:106:84
... Caused by: There is no result type defined for type 'json' mapped
with name 'success'. Did you mean 'json'? - result -
file:/C:/struts2worksp/Struts2HiberQuize_4/target/classes/struts.xml:107:45
来自行动类
public String execute() {
log.debug("Page " + getPage() + " Rows " + getRows()
+ " Sorting Order " + getSord() + " Index Row :" + getSidx());
log.debug("Search :" + searchField + " " + searchOper + " "
+ searchString);
Object list = session.get("mylist");
if (list != null) {
myCustomers = (List<Customer>) list;
} else {
log.debug("Build new List");
myCustomers = new CustomerDAO().getList();
}
if (sord != null && sord.equalsIgnoreCase("asc")) {
// Collections.sort(myCustomers);
}
if (sord != null && sord.equalsIgnoreCase("desc")) {
// Collections.sort(myCustomers);
// Collections.reverse(myCustomers);
}
// Count all record (select count(*) from your_custumers)
records = CustomerDAO.getCustomersCount(myCustomers);
if (totalrows != null) {
records = totalrows;
}
// Calucalate until rows ware selected
int to = (rows * page);
// Calculate the first row to read
int from = to - rows;
// Set to = max rows
if (to > records)
to = records;
if (loadonce) {
if (totalrows != null && totalrows > 0) {
setGridModel(myCustomers.subList(0, totalrows));
} else {
// All Custumer
setGridModel(myCustomers);
}
} else {
// Search Custumers
if (searchString != null && searchOper != null) {
int id = Integer.parseInt(searchString);
if (searchOper.equalsIgnoreCase("eq")) {
log.debug("search id equals " + id);
List<Customer> cList = new ArrayList<Customer>();
Customer customer = CustomerDAO.findById(myCustomers, id);
if (customer != null)
cList.add(customer);
setGridModel(cList);
} else if (searchOper.equalsIgnoreCase("ne")) {
log.debug("search id not " + id);
// setGridModel(CustomerDAO.findNotById(myCustomers, id, from, to));
} else if (searchOper.equalsIgnoreCase("lt")) {
log.debug("search id lesser then " + id);
// setGridModel(CustomerDAO.findLesserAsId(myCustomers, id, from, to));
} else if (searchOper.equalsIgnoreCase("gt")) {
log.debug("search id greater then " + id);
// setGridModel(CustomerDAO.findGreaterAsId(myCustomers, id, from, to));
}
} else {
// setGridModel(CustomerDAO.getCustomers(myCustomers, from, to));
}
}
// Calculate total Pages
total = (int) Math.ceil((double) records / (double) rows);
// only for showcase functionality, don't do this in production
session.put("mylist", myCustomers);
return SUCCESS;
}
JSP
<s:url id="remoteurl" action="jgrid" namespace="/grid"/>
<sjg:grid
id="gridtable"
caption="Customer Examples"
dataType="json"
href="%{remoteurl}"
pager="true"
gridModel="gridModel"
rowList="5,10"
rowNum="5"
rownumbers="true"
>
<sjg:gridColumn name="id" index="id" title="ID" formatter="integer" sortable="false"/>
<sjg:gridColumn name="name" index="name" title="Name" sortable="true"/>
<sjg:gridColumn name="country" index="country" title="Country" sortable="false"/>
<sjg:gridColumn name="city" index="city" title="City" sortable="false"/>
<sjg:gridColumn name="creditLimit" index="creditLimit" title="Credit Limit" formatter="currency" sortable="false"/>
</sjg:grid>
答案 0 :(得分:1)
您加载了错误的配置文件struts.xml
。 json
结果类型由包json-default
中的struts2-json插件定义。如果在包中使用此类型的结果,则应扩展定义此结果类型的包,或者在包含该类型结果的包中定义此结果类型。 json
结果没有默认属性,因此您不应使用它。标签的主体可用于此结果使用的不同参数。