亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Struts2 自定義Result

2019-11-14 22:08:58
字體:
來源:轉載
供稿:網友
Struts2 自定義Result

注意:我只要是解決自定義返回Json 和異常處理問題

新建一個類 AjaxResult 繼承 StrutsResultSupport 看看代碼吧

public class AjaxResult extends StrutsResultSupport {    /**     * serialVersionUID     */    PRivate static final long serialVersionUID = 1L;    private static final String AJAX_SUCCESS = "{/"success/":true}";    private static final String SUCCESS_PERFIX = "{/"success/":true,result:[";    private static final String FAILURE_PERFIX = "{/"success/":false,result:[],";    private static final String SUFFIX = "]}";    private Writer writer;    private String defaultEncoding = "UTF-8";    @Inject("struts.i18n.encoding")    public void setDefaultEncoding(String encoding) {        this.defaultEncoding = encoding;    }    protected void doExecute(String finalLocation, ActionInvocation invocation)            throws Exception {        Object action = invocation.getAction();        String responseData = "";        if ((action instanceof BaseAction)) {            BaseAction ajaxAction = (BaseAction) action;            HttpServletResponse response = ServletActionContext.getResponse();            String encoding = getEncoding(finalLocation);            String contentType = getContentType(finalLocation);            if (encoding != null) {                contentType = contentType + ";charset=" + encoding;            }            response.setContentType(contentType);            String successData = ajaxAction.getResponseData();            if (successData != null) {                if ("success".equals(successData)) {                    responseData = "{/"success/":true}";                } else {                    responseData = successData;                }            }            // if(true){            // String errorResultLocation = ajaxAction.getErrorResultLocation();            // String exceptionMessage =            // invocation.getStack().findString("exception.message");            // exceptionMessage = exceptionMessage.replaceAll("/r", " ");            // exceptionMessage = exceptionMessage.replaceAll("/n", " ");            // exceptionMessage = exceptionMessage.replaceAll("/t", " ");            // responseData = getFailureData(null, exceptionMessage);            // }            getWriter().write(responseData);        }    }    private String getFailureData(String errorResultLocation,            String exceptionMessage) {        String errors = "errors:[{msg:/"" + exceptionMessage + "/"}]";        // if (StringUtils.isNotBlank(errorResultLocation)) {        // String target = ",/"target/":/"" + errorResultLocation;        // return "{/"success/":false,result:[]," + errors + target + "/"}";        // }        return "{/"success/":false,result:[]," + errors + "}";    }    public void setWriter(Writer writer) {        this.writer = writer;    }    protected Writer getWriter() throws IOException {        if (this.writer != null) {            return this.writer;        }        return ServletActionContext.getResponse().getWriter();    }    protected String getContentType(String templateLocation) {        return "application/json";    }    protected String getEncoding(String templateLocation) {        String encoding = this.defaultEncoding;        if (encoding == null) {            encoding = System.getProperty("file.encoding");        }        if (encoding == null) {            encoding = "UTF-8";        }        return encoding;    }}

接下來,我們需要一個Struts 的配置文件

<package name="ajax-default" abstract="true" extends="struts-default">        <result-types>            <result-type name="ajax"                class="com.guy.core.common.util.AjaxResult" />        </result-types>        <global-results>            <result name="ajax" type="ajax" />        </global-results>            </package>

之后我們新建一個公用類 BaseAction

public class BaseAction extends ActionSupport implements ModelDriven,sessionAware, ParameterAware, ServletRequestAware, ServletResponseAware{        /**     * serialVersionUID     */    protected final Log logger = LogFactory.getLog(getClass());    private static final long serialVersionUID = 1L;    public String SUCCESS="SUCCESS";    public static final String AJAX = "ajax";    protected Map session;    protected Map parameters;    protected HttpServletRequest servletRequest;    protected HttpServletResponse servletResponse;    private String responseData;    protected void createJSonData(String jsonData) {        setResponseData(jsonData);    }    public String getResponseData() {        return responseData;    }    public void setResponseData(String responseData) {        this.responseData = responseData;    }    public Map getSession() {        return session;    }    public void setSession(Map session) {        this.session = session;    }    public Map getParameters() {        return parameters;    }    public void setParameters(Map parameters) {        this.parameters = parameters;    }    public HttpServletRequest getServletRequest() {        return servletRequest;    }    public void setServletRequest(HttpServletRequest servletRequest) {        this.servletRequest = servletRequest;    }    public HttpServletResponse getServletResponse() {        return servletResponse;    }    public void setServletResponse(HttpServletResponse servletResponse) {        this.servletResponse = servletResponse;    }    @Override    public Object getModel() {        return null;    }          }

所有的action 都繼承BaseAction ModelDriven 我就不在解釋了百度去

例如

public class LoginAction extends BaseAction{
createJSonData("{/"success/":false,/"msg/":/"密碼錯誤。/"}");
return AJAX;

這樣我們的 BaseAction 就完事了,

對象ToString 轉成 json 格式了,方便查看

@Override     public String toString() {          return ToStringBuilder.reflectionToString(this);     }
 1  <interceptor-ref name="landingIct">   2                     <!-- 包括的方法,也就是攔截器攔截的方法<param name="includeMethods">方法1,方法2</param>       3                        4                     excludeMethods表示排除指定的方法,即不對標記為excludeMethods的方法進行攔截           5                     -->   6                     <param name="excludeMethods">landing</param>                   7                 </interceptor-ref>                   8                 <!-- 默認攔截器棧,如果不寫則通過默認攔截器完成的功能將失效。如:國際化等等詳細查看struts-default -->   9                 <!--  10                     如果action中沒有自定義的攔截器,struts2會為該action添加默認的攔截器,即defaultStack;如果action中用戶自己添加了自定義攔截器,將覆蓋掉系統的defaultStack,這時候需要我們顯式調用該攔截器棧。 11                  -->  

拋出異常 處理,在beasAction設置 IsAjaxError AjaxErrorMessage

給get set 方法,

新建AjaxExceptionInterceptor

 public String intercept(ActionInvocation invocation)    throws Exception  {    String result;    try    {      result = invocation.invoke();    }    catch (Exception e) {      if (this.logEnabled) {        handleLogging(e);      }      List exceptionMappings = invocation.getProxy().getConfig().getExceptionMappings();      String mappedResult = findResultFromExceptions(exceptionMappings, e);      if (mappedResult != null) {        result = mappedResult;        Object action = invocation.getAction();        if (action instanceof AjaxProvider) {          AjaxProvider ajaxAction = (AjaxProvider)action;          Map results = invocation.getProxy().getConfig().getResults();          ResultConfig resultConfig = (ResultConfig)results.get(result);          String location = (String)resultConfig.getParams().get("location");          ajaxAtion.setIsAjaxError ("true");          ajaxAction.setAjaxErrorMessage(location);          result = "ajaxError";        }        super.publishException(invocation, new ExceptionHolder(e));      }      else {        throw e;      }    }    return result;  }

baseAction 這里判斷下是否有異常,有的花轉成json輸出到頁面

 // if(true){            // String errorResultLocation = ajaxAction.getErrorResultLocation();            // String exceptionMessage =            // invocation.getStack().findString("exception.message");            // exceptionMessage = exceptionMessage.replaceAll("/r", " ");            // exceptionMessage = exceptionMessage.replaceAll("/n", " ");            // exceptionMessage = exceptionMessage.replaceAll("/t", " ");            // responseData = getFailureData(null, exceptionMessage);            // }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大片欧美激情性色a∨久久| 成人精品一区二区三区电影黑人| 欧美精品在线免费| 亚洲欧美精品在线| 日韩中文在线观看| 国产精品女人久久久久久| 亚洲精品在线不卡| 97色在线观看免费视频| 亚洲欧洲免费视频| 日韩成人性视频| 欧美性20hd另类| 国产欧美一区二区三区四区| 国产有码在线一区二区视频| 久久久精品国产一区二区| 亚洲午夜久久久久久久| 美女福利视频一区| 91精品久久久久久久久久| 午夜精品久久久99热福利| 久久久久久一区二区三区| 精品国内亚洲在观看18黄| 久久这里只有精品视频首页| 狠狠躁夜夜躁久久躁别揉| 国产最新精品视频| 庆余年2免费日韩剧观看大牛| 欧美成人精品xxx| 国产综合香蕉五月婷在线| 68精品国产免费久久久久久婷婷| 日韩av大片在线| 国产偷亚洲偷欧美偷精品| 欧美美女15p| 92裸体在线视频网站| 亚洲自拍偷拍在线| 精品女厕一区二区三区| 色噜噜狠狠狠综合曰曰曰| 国产精品久久久久久久久久久不卡| 久久夜色精品国产欧美乱| 91成人在线播放| 午夜精品美女自拍福到在线| 欧美日韩在线视频首页| 亚洲男人的天堂网站| 亚洲美女精品久久| 欧美黑人xxx| 精品国产拍在线观看| 亚洲成人国产精品| 日韩乱码在线视频| xx视频.9999.com| 欧美极品xxxx| 久久偷看各类女兵18女厕嘘嘘| 亚洲成成品网站| 久久久999精品视频| 亚洲精品在线视频| 亚洲精品福利视频| 亚洲精品wwwww| 日韩最新免费不卡| 国产成人在线精品| 亚洲第一区中文字幕| 不卡av电影在线观看| 亚洲男人的天堂网站| 国产精品wwwwww| 日本高清视频一区| 国产精品日日摸夜夜添夜夜av| 欧美激情亚洲激情| 亚洲精品在线视频| 久久99视频精品| 国产在线拍偷自揄拍精品| 亚洲国产一区二区三区在线观看| 精品一区精品二区| 亚洲91av视频| 最新91在线视频| 欧美怡春院一区二区三区| 最新国产精品拍自在线播放| 日韩中文理论片| 精品国产乱码久久久久久天美| 亚洲精品资源美女情侣酒店| 日韩av网址在线观看| 国产日韩欧美视频| 国产精品久久久久久久久久99| 国产精品视频1区| 96精品视频在线| 久久久999成人| 中文字幕在线看视频国产欧美| 亚洲天堂第二页| 国产日韩欧美夫妻视频在线观看| 欧美高清第一页| 亚洲免费福利视频| 色综合91久久精品中文字幕| 国产精品极品在线| 中文字幕亚洲国产| 蜜臀久久99精品久久久久久宅男| 欧美性猛交xxxx乱大交3| 国产视频精品自拍| 欧美国产日韩一区| 97婷婷涩涩精品一区| 国产精品丝袜久久久久久高清| 亚洲欧洲日产国产网站| 日本一区二区三区四区视频| 911国产网站尤物在线观看| 精品magnet| 97国产精品免费视频| 日韩av一卡二卡| 亚洲天堂视频在线观看| 懂色aⅴ精品一区二区三区蜜月| 在线播放亚洲激情| 色阁综合伊人av| 精品国产31久久久久久| 国产精品自产拍在线观看中文| 美日韩精品视频免费看| 亚洲乱码国产乱码精品精| 亚洲理论电影网| 欧美高跟鞋交xxxxxhd| 精品国产自在精品国产浪潮| 国产91在线播放精品91| 日韩专区在线观看| 欧美区二区三区| 91精品国产91久久久久久最新| 欧日韩不卡在线视频| 欧美精品videofree1080p| 国产精品免费久久久| 狠狠色狠狠色综合日日五| 久久99热精品这里久久精品| 欧美激情第三页| 亚洲美女喷白浆| 国产精品久久久久久影视| 国产91色在线|免| 亚洲精品国产美女| 欧美精品18videosex性欧美| 国产精品av免费在线观看| 成人免费视频97| 国产一区二区三区中文| 国产精品自拍小视频| 国产精品99久久久久久白浆小说| 精品久久中文字幕| 国产成人jvid在线播放| 一级做a爰片久久毛片美女图片| 最近2019中文字幕大全第二页| 亚洲电影免费在线观看| 欧美裸体xxxx| 不卡在线观看电视剧完整版| 色老头一区二区三区| 国产精品视频专区| 精品久久久久久国产| 日韩精品欧美国产精品忘忧草| 日韩精品高清在线| 国产精品久久国产精品99gif| 亚洲一区二区三区乱码aⅴ| 91免费看片在线| 懂色aⅴ精品一区二区三区蜜月| 国产视频精品一区二区三区| 九色精品免费永久在线| 国产精品久久久久久亚洲影视| 97视频在线免费观看| 国产亚洲欧美视频| 国产视频自拍一区| 日韩高清有码在线| 精品国产鲁一鲁一区二区张丽| 91久久国产精品91久久性色| 91av在线播放视频| 亚洲黄在线观看| 日韩中文字幕在线看| 精品无人区乱码1区2区3区在线| 久久青草福利网站| 欧美制服第一页| 欧美伊久线香蕉线新在线| 国产精品香蕉在线观看|