多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > springMVC源碼分析--ViewNameMethodReturnValueHandler返回值處理器(三)

springMVC源碼分析--ViewNameMethodReturnValueHandler返回值處理器(三)

來源:程序員人生   發(fā)布時間:2017-02-22 09:02:48 閱讀次數(shù):4253次

之前兩篇博客springMVC源碼分析--HandlerMethodReturnValueHandler返回值解析器(1)和 springMVC源碼分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(2)我們分別介紹了返回值處理器相干的東西,接下來我們選取1個簡單的實(shí)現(xiàn)類ViewNameMethodReturnValueHandler來簡單介紹1下返回值處理操作。


1、返回值為jsp頁面地址

    @RequestMapping(value = "input")
    public String inputProduct() {
        logger.info("inputProduct called");
        return "jsp/ProductForm";  //對應(yīng)jsp頁面名稱
    }

2、ViewNameMethodReturnValueHandler中對返回值jsp/ProductForm的處理


實(shí)現(xiàn)代碼以下:

@Override
	public void handleReturnValue(Object returnValue, MethodParameter returnType,
			ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
		//判斷是不是是String類型
		if (returnValue instanceof CharSequence) {
			//如果是將其設(shè)置為視圖名稱
			String viewName = returnValue.toString();
			mavContainer.setViewName(viewName);
			if (isRedirectViewName(viewName)) {
				mavContainer.setRedirectModelScenario(true);
			}
		}
		else if (returnValue != null){
			// should not happen
			throw new UnsupportedOperationException("Unexpected return type: " +
					returnType.getParameterType().getName() + " in method: " + returnType.getMethod());
		}
	}

這樣就把返回值jsp/ProductForm作為視圖名稱放到ModelAndView中,這樣就完成了返回值的處理操作。

ViewNameMethodReturnValueHandler完全源碼以下,處理機(jī)制還是比較簡單的。

//HandlerMethodReturnValueHandler的子類,主要就是Controller履行后返回的視圖名稱
public class ViewNameMethodReturnValueHandler implements HandlerMethodReturnValueHandler {

	private String[] redirectPatterns;

	//設(shè)置跳轉(zhuǎn)鏈接的匹配方式
	public void setRedirectPatterns(String... redirectPatterns) {
		this.redirectPatterns = redirectPatterns;
	}

	/**
	 * The configured redirect patterns, if any.
	 */
	public String[] getRedirectPatterns() {
		return this.redirectPatterns;
	}

	@Override
	public boolean supportsReturnType(MethodParameter returnType) {
		Class<?> paramType = returnType.getParameterType();
		return (void.class == paramType || CharSequence.class.isAssignableFrom(paramType));
	}
	//實(shí)現(xiàn)邏輯還是比較簡單的,就是設(shè)置ModelAndViewContainer的viewName視圖名稱
	@Override
	public void handleReturnValue(Object returnValue, MethodParameter returnType,
			ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {

		if (returnValue instanceof CharSequence) {
			String viewName = returnValue.toString();
			mavContainer.setViewName(viewName);
			if (isRedirectViewName(viewName)) {
				mavContainer.setRedirectModelScenario(true);
			}
		}
		else if (returnValue != null){
			// should not happen
			throw new UnsupportedOperationException("Unexpected return type: " +
					returnType.getParameterType().getName() + " in method: " + returnType.getMethod());
		}
	}
	//判斷返回值是不是是跳轉(zhuǎn)鏈接,以redirect:開頭
	protected boolean isRedirectViewName(String viewName) {
		return (PatternMatchUtils.simpleMatch(this.redirectPatterns, viewName) || viewName.startsWith("redirect:"));
	}

}



生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 性欧美一级 | 欧美另类videovideosex | 国产乱码精品一区二区三上 | 欧美日韩免费大片 | 欧美一区综合 | 一二三四视频免费视频 | 免费爱爱视频网站 | 秋霞一级特黄真人毛片 | 亚洲制服另类 | 中文字幕在线二区 | 欧美精品亚洲精品日韩专区va | 国产亚洲一区二区三区在线观看 | 天啦噜tianlalu精品视频 | 中文字幕亚洲欧美日韩不卡 | 日产免费线路一区二区三区 | 一级精品视频 | 亚洲第一网站免费视频 | 国产高清不卡一区二区 | 大杳焦伊人久久综合热 | 大杳焦伊人久久综合热 | 自由成熟的性色视频免费观看 | 欧美操美女 | 欧美日韩高清不卡一区二区三区 | 精品国产福利 | 亚洲人成免费 | 狠狠插网站 | 福利区在线观看 | 亚洲欧洲一区二区 | 日韩精品久久不卡中文字幕 | 国产精品欧美视频另类专区 | 亚洲欧洲久久 | 成人午夜免费在线观看 | 午夜福免费福利在线观看 | 视频在线观看h | 色吊丝二区三区中文字幕 | 午夜国产精品不卡在线观看 | tube日本黑人杂交 | 在线一级毛片 | 国语对白清晰好大好白在线 | 国产在线观看成人 | 久久视频精品36线视频在线观看 |