struts2-core-2.18和struts2-core-2.16整合jsonplugin 是不一样的
一、用struts2-core-2.16话需要依赖包为:
json-lib2.1.jar
json-plugin-0.33.jar
ezmorph-1.0.3.jar
commons-beanutils-1.7.0.jar或1.8
如果少包,则会报错:
java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lang/Object;)Ljava/lang/Object;
at com.googlecode.jsonplugin.JSONResult.execute(JSONResult.java:153)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361)
二、用struts2-core-2.18,因为2.18比2.16少打包一个com.opensymphony.xwork2.util.TextUtils.class文件会导致,整合出错,会报错:找不到TextUtils.class,所以需要自己打包一个含TextUtils.class的包
json-lib2.1.jar
json-plugin-0.33.jar
ezmorph-1.0.3.jar
commons-beanutils-1.7.0.jar或1.8
textUtils.jar
三、一般的整合方法是,自己建一个dto
import java.io.Serializable;
/**
* 返回给浏览器的对象,包含此次操作的状态和数据
*
*
*
*/
public class JsonResult implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 操作是否成功
*/
private Boolean success;
/**
* 操作的信息
*/
private String message;
/**
* 返回的数据
*/
private Object data;
/**
* @return 操作是否成功
*/
public Boolean getSuccess() {
return success;
}
/**
* @param success
* 操作是否成功
*/
public void setSuccess(Boolean success) {
this.success = success;
}
/**
* @return 操作的信息
*/
public String getMessage() {
return message;
}
/**
* @param message
* 操作的信息
*/
public void setMessage(String message) {
this.message = message;
}
/**
* @return 返回的数据
*/
public Object getData() {
return data;
}
/**
* @param data
* 返回的数据
*/
public void setData(Object data) {
this.data = data;
}
/**
*
*
* @param success
* 操作是否成功
* @param message
* 操作的信息
* @param data
* 返回的数据
* @author Panxiaobo
*
*/
public JsonResult(Boolean success, String message, Object data) {
super();
this.success = success;
this.message = message;
this.data = data;
}
/**
* 直接调用this(success, message, null);
*
* @param success
* 操作是否成功
* @param message
* 操作的信息
*
* @see #JsonResult(Boolean, String, Object)
*/
public JsonResult(Boolean success, String message) {
this(success, message, null);
}
}
然后在struts.xml 中配置
<global-results>
<result name="json" type="json">
<param name="root">result</param>
<param name="ignoreHierarchy">false</param>
<param name="noCache">true</param>
</result>
</global-results>
或者在action中配置如:
/**
* Struts2 Action基类.支持json格式的返回
*
*
*/
@SuppressWarnings( { "serial" })
@Result(name = "json", type = "json", params = { "root", "result" })
public abstract class SimpleActionSupport extends ActionSupport {
protected final Logger logger = LoggerFactory.getLogger(getClass());
public static final String JSON = "json";
/**
*
* 返回成功信息
*
* @param message
* 信息
* @return SUCCESS
*
*/
protected String success(String message) {
result = new JsonResult(Boolean.TRUE, message);
return JSON;
}
/**
* Json的Root
*
* @return 返回给浏览器的json对象
*/
public JsonResult getResult() {
return result;
}
/**
*
* 返回失败信息
*
* @param message
* 信息
* @return SUCCESS
*
*/
protected String fail(String message) {
result = new JsonResult(Boolean.FALSE, message);
return JSON;
}
/**
* 返回给浏览器的json对象
*/
protected JsonResult result;
/**
*
* 返回成功信息和数据
*
* @param message
* 信息
* @param data
* 数据
* @return SUCCESS
*
*/
protected String success(String message, Object data) {
result = new JsonResult(Boolean.TRUE, message, data);
return JSON;
}
}