国际化和自动类型转换

国际化 | 拦截器


Locale对象,更改Locale对象,改变文字显示的信息 放在session作用域当中

动态设置语言信息

1、配置

注意:id不可更改,不然获取不到值

 <!--        资源文件 id -->
    <bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource">
        <property name="basename" value="i18n"></property>
    </bean>
    <!--    放置在session作用域中-->
    <bean class="org.springframework.web.servlet.i18n.SessionLocaleResolver" id="localeResolver"></bean>
<!--    拦截器-->
    <mvc:interceptors>
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
    </mvc:interceptors>

创建资源文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9koKs4MH-1632906653825)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210927171555503.png)]

文件名前缀必须相同,后面的语言和国家缩写(en_US)可以通过测试得到

@Test
public void test01(){
    Locale locale=Locale.US;
    System.out.println(locale.getLanguage()+"\t"+locale.getCountry());
}

idea中可以将中文自动转译成对应的文字自动转换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LaDAMUEY-1632906653827)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926103203463.png)]

或者创建个文件(eg.D盘下面创建个a.txt)输入在DOS窗口,,切换到D盘,执行下面这个方法

native2ascii a.txt b.txt

a.txt

english:英语
chinese:汉语

转译为b.txt(转为Unicode编码)

english:\u947b\u8fab\ue1e2
chinese:\u59f9\u590e\ue1e2

这样就可以拿来写入文件中了

然后在前端页面同过fmt标签来拿取值

<a href="${pageContext.request.contextPath}/loginjsp?locale=en_US"><fmt:message key="i18n.english"/> </a>
<a href="${pageContext.request.contextPath}/loginjsp?locale=zh_CN"><fmt:message key="i18n.chinese"/> </a>

链接地址为当前页面的映射字段,传参locale=(文件名的后缀),就会自动切换到指定的语言。切记:locale不能写错,初级进入时的语言为浏览器默认的语言类型。

拦截器

​ 自己创建类,实现接口HandlerInterceptor,再重写三个默认的方法

public class firstInterceptors implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle方法执行了");
        if(request.getSession().getAttribute("name")!=null){
            return true;
        }else {
            request.getRequestDispatcher("WEB-INF/views/login.jsp").forward(request,response);
            return false;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle方法执行了");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion方法执行了");
    }
}

​ preHandle方法在执行 controller方法之前, 如果返回false,下面就不继续走了

​ postHandle controller方法之后

​ afterCompletion 视图界面渲染完成之后执行

配置注册

  <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/logins"/>
            <mvc:exclude-mapping path="/index"/>
            <bean class="com.ljh.interceptors.firstInterceptors"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

​ 其中: /** 指多级路径

​ exclude-mapping 指不包含,通过改地址不进入拦截器

​ 自定义的拦截器的bean对象需写在

mvc:interceptor

</mvc:interceptor>

多个拦截器,进入的顺序是根据配置的拦截器顺序执行,返回时顺序刚好相反(和filter相同)

-reverse:将Unicode编码转为本地或者指定编码,不指定编码情况下,将转为本地编码。
-encoding encoding_name:转换为指定编码,encoding_name为编码名称。

自动类型转换

日期类型转换:

​ 1、添加注解@DateTimeFormat,后面的pattern是类型

public class Student {
    private String name;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date date1;
    @DateTimeFormat(pattern = "yyyy/MM/dd")
    private Date date2;
}

测试

<form action="${pageContext.request.contextPath}/date" method="post">
    姓名<input type="text" name="name">
    日期一<input type="text" name="date1">
    日期二<input type="text" name="date2">
    <p><input type="submit" value="提交"></p>
</form>
@PostMapping(value = "/date")
public void date( Student stu){
    System.out.println(stu.getName()+"\t"+stu.getDate1()+"\t"+stu.getDate2());
}

输出[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yK1FNjJR-1632906653828)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210929093617028.png)]

日期自动转字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dTrIp1UH-1632906653829)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926161648025.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSCBvfXU-1632906653830)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926161828632.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-POQHhklf-1632906653831)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210926162318480.png)]

1.创建类,实现接口

2、配置conversition…

期自动转字符串

[外链图片转存中…(img-dTrIp1UH-1632906653829)]

[外链图片转存中…(img-bSCBvfXU-1632906653830)]

[外链图片转存中…(img-POQHhklf-1632906653831)]

1.创建类,实现接口

2、配置conversition…

3、配置之后,注解就失效了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值