Springmvc国际化和文件上传(八)

一、国际化

我们这里需要解决三个问题

  1. 在页面上能够根据浏览器语言设置的情况对文本(不是内容), 时间, 数值进行本地化处理
  2. 可以在 bean 中获取国际化资源文件 Locale 对应的消息
  3. 可以通过超链接切换 Locale, 而不再依赖于浏览器的语言设置情况
问题一

这里我们先解决第一个问题。
默认情况下SpringMVC根据Accept-Language参数判断客户端的本地化类型。
当接收到请求时,SpringMVC会在上下文中查找一个本地化解析器(LocaleResolver),找到后使用它获取请求所对应的本地化类型消息。

<bean id="messageSource"
        class="org.springframework.context.support.ResourceBundleMessageSource">
    <!-- 国际化信息所在的文件名 -->    
    <property name="basename" value="i18n"></property>  
    <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称  -->               
    <property name="useCodeAsDefaultMessage" value="true" />       
</bean>

页面上直接使用jstl标签显示信息

<fmt:message key="i18n.user"></fmt:message>

配置国际化资源文件i18n.properties、i18n_en_US.properties

i18n.user=User
i18n.password=Password

i18n_zh_CN.properties

i18n.user=\u7528\u6237\u540D
i18n.password=\u5BC6\u7801
问题二

在入参时候直接将Locale放到参数中,这样可以直接在 bean 中获取国际化资源文件 Locale 对应的消息。

@Autowired
ResourceBundleMessageSource messageSource;

@RequestMapping("/i18n")
public String testI18n(Locale locale) {
    String val = messageSource.getMessage("i18n.user", null, locale);
    System.out.println(val);
    return "i18n";
}
问题三
<!-- 配置 SessionLocaleResolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>

<mvc:interceptors>      
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>

页面上切换语言

<a href="i18n?locale=zh_CN">中文</a>
<br><br>
<a href="i18n?locale=en_US">英文</a>

SpringMVC还允许装配一个动态更改本地化类型的拦截器,这样通过指定一个请求参数就可以控制单个请求的本地化类型。

AcceptHeaderLocaleResolver:根据Http请求头Accept-Language参数确定本地化类型。默认使用。
CookieLocaleResolver:根据指定的Cookie值确定本地化类型。
SessionLocaleResolver:根据Session中特定的属性确定本地化类型。
LocaleChangeInterceptor:从请求参数中获取本次请求对应的本地化类型。

二、文件上传

SpringMVC为文件上传提供了直接支持,这种支持是通过即插即用的MultiResolver实现的。Spring 用Jakarta Commons FileUpload技术实现了一个MultiResolver实现类:CommonsMultipartResolver

SpringMVC 上下文默认没有装配 MultiResolver, 因此默认情况下上传文件比较麻烦,因此我们上传文件时需要配置MultiResolver。
需要将commons-io.jar和commons-fileupload.jar引入环境中。

<!--  上传:配置MultipartResovler -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- defaultEncoding:必须和jsp页面上的pageEncoding一致 -->
    <property name="defaultEncoding" value="utf-8"></property>
    <property name="maxUploadSize" value="1024"></property>
</bean>

页面表单

<form action="testUploadFile" method="post" enctype="multipart/form-data">
    File:<input type="file" name="file"/>
    Desc:<input type="text" name="desc"/>
    <input type="submit" value="Submit"/>
</form>

后台处理

@RequestMapping("/testUploadFile")
public String testUploadFile(@RequestParam(value="desc") String desc,
        @RequestParam("file") MultipartFile file) throws IOException {
    System.out.println("desc: " + desc);
    System.out.println("fileName: " + file.getOriginalFilename());
    System.out.println("inputStream: " + file.getInputStream().available());
    return "success";
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值