日期:2014-05-16  浏览次数:20367 次

struts2 整合 jsonplugin

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)