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) {result = new JsonResult(Boolean.TRUE, message, data);return JSON;}}?
1 楼 pxb1988 2010-08-26 java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lang/Object;)Ljava/lang/Object;