日期:2014-05-16 浏览次数:20367 次
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)