spring mvc多视图乱码

spring mvc多视图解析:freemarker + ? freemarker乱码

	<bean id="bundleViewResolver" name="bundleViewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
		<property name="basename" value="views" />
	</bean>

	<!-- 配置freeMarkerConfigurer进行属性值的注入 -->
	<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPaths" value="/"/>
		<property name="freemarkerVariables">
			<map>
				<entry key="uuid" value-ref="uuid"/>
				<entry key="process_time" value-ref="process_time"/>
				<entry key="text_cut" value-ref="text_cut"/>
				<entry key="html_cut" value-ref="html_cut"/>
				<entry key="category_list" value-ref="category_list"/>
				<entry key="forum_list" value-ref="forum_list"/>
				<entry key="topic_page" value-ref="topic_page"/>
				<entry key="post_page" value-ref="post_page"/>
				<entry key="my_topic" value-ref="my_topic"/>
				<entry key="my_reply" value-ref="my_reply"/>
				<entry key="topic_vcount" value-ref="topic_vcount"/>
				<entry key="config_count" value-ref="config_count"/>
				<entry key="topic_day" value-ref="topic_day"/>
				<entry key="newtopic_list" value-ref="newtopic_list"/>
			</map>
		</property>
		<property name="freemarkerSettings">
			<props>
				<prop key="tag_syntax">auto_detect</prop>
				<prop key="template_update_delay">5</prop>
				<prop key="defaultEncoding">UTF-8</prop>
				<prop key="url_escaping_charset">UTF-8</prop>
				<prop key="locale">zh_CN</prop>
				<prop key="boolean_format">true,false</prop>
				<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
				<prop key="date_format">yyyy-MM-dd</prop>
				<prop key="time_format">HH:mm:ss</prop>
				<prop key="number_format">0.######</prop>
				<prop key="whitespace_stripping">true</prop>
				<!--空值处理<prop key="classic_compatible">true</prop>-->
				<prop key="auto_import">/WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as s</prop>
			</props>
		</property>
	</bean>

	<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />

	<bean id="jstlViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="contentType" value="text/html; charset=UTF-8"/>
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/" />
		<property name="suffix" value=".jsp"></property>
	</bean>

	<!-- FreeMarker视图解析 
	<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
		<property name="contentType" value="text/html; charset=UTF-8"/>
		<property name="cache" value="true" />
	</bean>
	-->

	<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
	  	<property name="cache" value="true"/>
	  	<property name="prefix" value=""/>
	 	<property name="contentType" value="text/html; charset=UTF-8"/>
  		<property name="exposeSpringMacroHelpers" value="true"/>
  		<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
	</bean>

只要使用freemarker就会乱码,不管怎么设置

<property name="contentType" value="text/html; charset=UTF-8"/>

但是如果使用单视图只使用freemarker一个视图不是乱码:

最后的解决方式只能写个拦截器:

/**
 * 公共的comm的拦截器
 * 
 * 多视图使用freemarker时候乱码
 * 
 */
public class CommContextInterceptor extends HandlerInterceptorAdapter {
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//		String contentType = response.getContentType();
//		if (StringUtils.isEmptyOrNullByTrim(contentType)) {
//			response.setContentType("text/html;charset=UTF-8");
//		}
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		if (null != modelAndView && null == modelAndView.getModel().get(ConstantsV2.CONTEXT_PATH)) {
				modelAndView.addObject(ConstantsV2.CONTEXT_PATH, request.getContextPath());
		}
		String contentType = response.getContentType();
		if (StringUtils.isEmptyOrNullByTrim(contentType)) {
			response.setContentType("text/html;charset=UTF-8");
		}
	}

}

  

本人没有自己实现freemarker的类,或者可以自己实现,但是没有动手写 

如果谁有解决方法的请告知一下,非常感谢

猜你喜欢

转载自wad12302.iteye.com/blog/1264822