springmvc,freemarker,spring.ftl实现国际化配置解决方案
2014-05-09 18:15
375 查看
1.配置springmvc-servlet.xml,具体配置代码如下.这段代码必须放在.jsp视图之前
<!--freemarker页面解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".ftl"></property>
<property name="contentType" value="text/html;charset=UTF-8" />
<property name="viewClass" value="com.gotobus.common.ExFreeMarkerView" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
<!--配置Freemarker -->
<bean id="freemarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/ftl/"></property>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">10</prop>
<prop key="defaultEncoding">UTF-8</prop>
<prop key="auto_import">common/spring.ftl as spring</prop>
</props>
</property>
</bean>
<!-- jsp页面解析器,当Controller返回XXX字符串时,先通过拦截器,然后该类就会在/WEB-INF/jsp/目录下,查找XXX.jsp文件-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
注:标红处代表自动导入国际化配置文件,可以应用在模板里面:(ftl)
spring.ftl可以在jar包中找到,这里就不多说.
接下来,比较重要的一步就是:写我们自己的视图类
这段代码,就是,在前台响应.do请求时,进行处理的视图界面:
测试的controller类防范的编写
模板页面的测试代码:
推荐一下个人网站: 大神网
<!--freemarker页面解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".ftl"></property>
<property name="contentType" value="text/html;charset=UTF-8" />
<property name="viewClass" value="com.gotobus.common.ExFreeMarkerView" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
<!--配置Freemarker -->
<bean id="freemarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/ftl/"></property>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">10</prop>
<prop key="defaultEncoding">UTF-8</prop>
<prop key="auto_import">common/spring.ftl as spring</prop>
</props>
</property>
</bean>
<!-- jsp页面解析器,当Controller返回XXX字符串时,先通过拦截器,然后该类就会在/WEB-INF/jsp/目录下,查找XXX.jsp文件-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
注:标红处代表自动导入国际化配置文件,可以应用在模板里面:(ftl)
spring.ftl可以在jar包中找到,这里就不多说.
接下来,比较重要的一步就是:写我们自己的视图类
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Locale; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.support.RequestContextUtils; import org.springframework.web.servlet.view.freemarker.FreeMarkerView; import freemarker.template.SimpleHash; import freemarker.template.Template; import freemarker.template.TemplateException; public class ExFreeMarkerView extends FreeMarkerView { @Override protected void doRender(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { exposeModelAsRequestAttributes(model, request); SimpleHash fmModel = buildTemplateModel(model, request, response); System.out.println("come here"); if (logger.isDebugEnabled()) { logger.debug("Rendering FreeMarker template [" + getUrl() + "] in FreeMarkerView '" + getBeanName() + "'"); } Locale locale = RequestContextUtils.getLocale(request); if(Boolean.FALSE.equals(model.get("STATIC_HTML"))){ processTemplate(getTemplate(locale), fmModel, response); }else{ String htmlFilePath=(String) model.get("htmlFilePath"); String htmlFileName=(String) model.get("htmlFileName"); createHTML(getTemplate(locale), fmModel, request, response,htmlFilePath,htmlFileName); } } public void createHTML(Template template, SimpleHash model,HttpServletRequest request, HttpServletResponse response,String htmlFilePath,String htmlFileName) throws IOException, TemplateException, ServletException { String basePath = request.getSession().getServletContext().getRealPath("/"); String requestHTML=htmlFilePath+htmlFileName; String htmlPath = basePath + requestHTML; File generatorhtmlFile = new File(htmlPath); if(!generatorhtmlFile.getParentFile().exists()){ generatorhtmlFile.getParentFile().mkdirs(); } generatorhtmlFile.createNewFile(); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(generatorhtmlFile), "UTF-8")); template.process(model, out); out.flush(); out.close(); System.out.println("success"); request.getRequestDispatcher(requestHTML).forward(request, response); } }
这段代码,就是,在前台响应.do请求时,进行处理的视图界面:
测试的controller类防范的编写
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.gotobus.controller.BaseController; import com.gotobus.service.impl.common.page.TourRoutePageService; @Controller public class PageController extends BaseController { @RequestMapping("createTourRouteHtml.do") public ModelAndView createTourRouteHtmlFile(){ ModelAndView modelAndView = new ModelAndView("index"); List list1 = new ArrayList(); Map map=new HashMap(); Map map1=new HashMap(); list1=tourRoutePageService.getModel(); map1=tourRoutePageService.getMap(); Iterator<Map> it = list1.iterator(); while (it.hasNext()) { map = it.next(); modelAndView.addObject("test2", map.get("test1")); } modelAndView.addObject("content", "网站标题"); modelAndView.addObject("htmlFilePath", "/tour_route_pages_test/"); modelAndView.addObject("htmlFileName", "index.html"); modelAndView.addObject("html", tourRoutePageService.getHtml()); modelAndView.addObject("model", tourRoutePageService.getModel()); modelAndView.addObject("demo1", map1.get("demo1")); modelAndView.addObject("demo2", map1.get("demo2")); //当设置false时不生成静态页面 modelAndView.addObject("STATIC_HTML", true); return modelAndView; } }
模板页面的测试代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <#import "/common/spring.ftl" as spring/> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>new website---website---website</title> </head> <body> this is result for conetent:${content} guojihuapeizhi:<@spring.message "home"/> shsahsajs:${html} dsdsaada: <#list model as map> <#list map?keys as itemKey> <input type="button" name="button1" value="<#if itemKey="test1">Phone:${map[itemKey]}</#if>"/> <#if itemKey="test1"> Phone:${map[itemKey]} </#if> <#if itemKey="test2"> Email:${map[itemKey]} </#if> <#if itemKey="test3"> Address:${map[itemKey]} </#if> </#list><br/> </#list> <br> dsadsadsad::::${test2} <br> wwwwwwwwwwwww:${demo1}<br> tttttttttttt:${demo2} </body> </html>
推荐一下个人网站: 大神网
相关文章推荐
- 基于浏览器首选语言的springmvc和freemarker国际化配置的实现
- 基于浏览器首选语言的springmvc和freemarker国际化配置的实现
- [置顶] spring + jstl 实现java国际化的配置步骤
- springMVC+freemarker 中 Could not resolve view with name 'XXX.ftl' in servlet with name 'SpringMVC'
- SpringMVC+Freemarker+jQuery实现多语言(国际化)切换
- Spring国际化实现配置
- freemarker中使用<@spring.*>标签实现国际化
- 项目记录:springmvc+freemarker 实现国际化
- spring boot+JPA+easyUI 实现基于浏览器语言的国际化配置
- SpringMVC+Spring+mybatis+redis项目从零开始--Springmvc配置实现
- 项目中实现国际化Spring配置
- spring + jstl 实现java国际化的配置步骤
- SpringMvc (五) 验证国际化/本地国际化解析器的配置(手动更改 locale)/spring 标签 messagee
- SpringMVC+Spring+mybatis+redis项目从零开始--Springmvc配置实现
- Spring MVC+Freemarker+Javascript的多语言(国际化i18n/本地化)和主题(Theme)实现
- spring + jstl 实现java国际化的配置步骤
- Spring MVC+Freemarker+Javascript的多语言(国际化i18n/本地化)和主题(Theme)实现
- Spring通过SchedulerFactoryBean实现调度任务的配置
- SpringBoot系列——Java配置(SpringMVC配置)
- spring boot 集成quartz 2.0 实现前端动态配置(获取spring上下文)的两种方式,启动数据库中已开启定时任务