- 浏览: 126514 次
- 来自: ...
最近访客 更多访客>>
文章分类
最新评论
-
dwangel:
给messageSource设置属性
<property ...
Spring i18n的better practice(相对于appfuse) -
dwangel:
spring 的message tag有一个属性text,可以 ...
Spring i18n的better practice(相对于appfuse) -
sn201:
awk高级篇
有问题啊!有问题!有问题!有问题!有问题!
i ...
awk文本处理总结(入门,中级,高级) -
happy_javaboy:
...
Log4j日志管理系统简单使用说明
因为希望把SpringSide搞成国际化项目,i18n就成了必做的事情。
照抄appfuse,折腾了很久后才发现appfuse式的sample总是只顾着演示自己的一亩三分地而忽略了很多其他东西。
1.从基础开始,没有Spring时,Java的i18n是这样的:
1.1 jsp环境
首先写一个messages.zh_CN.properties文件,放在class-path也就是/WEB-INF/classes里 welcome=欢迎 然后用native2ascii.exe把它转为 welcome=\u6b22\u8fce
在web.xml中定义messages文件
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>messages</param-value>
</context-param>
最后在jsp里使用
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:message key="welcome"/>
如果有多个Resource Bundle文件, 就要在jsp里用<ftm:bundle>定义了.
1.2 pure Java环境
ResourceBundle rb = ResourceBundle.getBundle("messages");
String welcome = rb.getString("welcome");
2.Spring的增强及appfuse的做法
Spring增加了MessageSource的概念,一是ApplicationContext将充当一个单例的角色,不再需要每次使用i18时都初始化一次ResourceBundle,二是可以代表多个Resource Bundle.
在ApplicationContext的定义文件中,增加如下节点:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>
则在pure java环境中。 context.getMessage("welcome", null, Locale.CHINA)
而在jsp环境中,Controller调用JSTL viewResolver再调用Jsp时,<fmt:message>将继续发挥它的功效。
因此,appfuse等sample都是在appfuse-servlet.xml 中定义一个<messageSource>。
3.Better Practice
3.1 要不要定义javax.servlet.jsp.jstl.fmt.localizationContext[定义]
Appfuse等sample,都是假定大家完全使用Controller作访问入口,jsp甚至藏在了/web-inf/中。而很不幸,大家的项目可能还是有很多直接访问jsp的地方,而直接访问jsp时,<messageSource>节点是没有作用的。
但如果定义了javax...localizationContext, 又会让MessageSource失效......
3.2 messageSource定义在ApplicationContext.xml还是appfuse-servlet.xml
ApplicationContext*.xml由ContextLoaderListener载入,而appfuse-servlet.xml靠dispatchServlet载入,并拥有一个指向ApplcationContex*.xml指针。所以,appfuse-servlet.xml能看到定义在ApplcationContext里的东西,而反之做不到。
明显, 把<messageSource>定义在ApplicationContext.xml 能获得更好的可见性。
但是appfuse没有在pure Java代码中使用i18n,也就没有考虑这个问题。
3.3 坚决不用鸡肋级<spring:message> tag
连appfuse也不用它,可见多么鸡肋。因为fmt在找不到资源时,最多显示???welcome???,而<spring:message>则会抛出异常,谁会喜欢这种定时阿。
3.4 有趣的theme 解决"做成图片的文字"的国际化
theme也就是把message的原理发挥了一下,让不同语言的美术字图片的路径也可以定义在theme_zh_CN.properties和theme_en_US.properties中。终于有一个不那么鸡肋的spring tag了。
4.简单归纳
1. jstl中仍然使用标准的<ftm:message>及其定义?
2.java中使用spring的<messageSource>实现单例
3.用<spring:theme>解决那些做成图片的文字的国际化问题
4.Spring 还有session,cookie locale resolver, 到时可以看一下.
照抄appfuse,折腾了很久后才发现appfuse式的sample总是只顾着演示自己的一亩三分地而忽略了很多其他东西。
1.从基础开始,没有Spring时,Java的i18n是这样的:
1.1 jsp环境
首先写一个messages.zh_CN.properties文件,放在class-path也就是/WEB-INF/classes里 welcome=欢迎 然后用native2ascii.exe把它转为 welcome=\u6b22\u8fce
在web.xml中定义messages文件
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>messages</param-value>
</context-param>
最后在jsp里使用
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:message key="welcome"/>
如果有多个Resource Bundle文件, 就要在jsp里用<ftm:bundle>定义了.
1.2 pure Java环境
ResourceBundle rb = ResourceBundle.getBundle("messages");
String welcome = rb.getString("welcome");
2.Spring的增强及appfuse的做法
Spring增加了MessageSource的概念,一是ApplicationContext将充当一个单例的角色,不再需要每次使用i18时都初始化一次ResourceBundle,二是可以代表多个Resource Bundle.
在ApplicationContext的定义文件中,增加如下节点:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>
则在pure java环境中。 context.getMessage("welcome", null, Locale.CHINA)
而在jsp环境中,Controller调用JSTL viewResolver再调用Jsp时,<fmt:message>将继续发挥它的功效。
因此,appfuse等sample都是在appfuse-servlet.xml 中定义一个<messageSource>。
3.Better Practice
3.1 要不要定义javax.servlet.jsp.jstl.fmt.localizationContext[定义]
Appfuse等sample,都是假定大家完全使用Controller作访问入口,jsp甚至藏在了/web-inf/中。而很不幸,大家的项目可能还是有很多直接访问jsp的地方,而直接访问jsp时,<messageSource>节点是没有作用的。
但如果定义了javax...localizationContext, 又会让MessageSource失效......
3.2 messageSource定义在ApplicationContext.xml还是appfuse-servlet.xml
ApplicationContext*.xml由ContextLoaderListener载入,而appfuse-servlet.xml靠dispatchServlet载入,并拥有一个指向ApplcationContex*.xml指针。所以,appfuse-servlet.xml能看到定义在ApplcationContext里的东西,而反之做不到。
明显, 把<messageSource>定义在ApplicationContext.xml 能获得更好的可见性。
但是appfuse没有在pure Java代码中使用i18n,也就没有考虑这个问题。
3.3 坚决不用鸡肋级<spring:message> tag
连appfuse也不用它,可见多么鸡肋。因为fmt在找不到资源时,最多显示???welcome???,而<spring:message>则会抛出异常,谁会喜欢这种定时阿。
3.4 有趣的theme 解决"做成图片的文字"的国际化
theme也就是把message的原理发挥了一下,让不同语言的美术字图片的路径也可以定义在theme_zh_CN.properties和theme_en_US.properties中。终于有一个不那么鸡肋的spring tag了。
4.简单归纳
1. jstl中仍然使用标准的<ftm:message>及其定义?
2.java中使用spring的<messageSource>实现单例
3.用<spring:theme>解决那些做成图片的文字的国际化问题
4.Spring 还有session,cookie locale resolver, 到时可以看一下.
评论
2 楼
dwangel
2013-07-13
给messageSource设置属性
<property name="useCodeAsDefaultMessage" value="true" />
也可以阻止找不到key时抛异常。
<property name="useCodeAsDefaultMessage" value="true" />
也可以阻止找不到key时抛异常。
1 楼
dwangel
2013-07-13
spring 的message tag有一个属性text,可以填写缺省值。
有缺省值时,不抛异常的。
不知道这个属性是不是后来加的。
有缺省值时,不抛异常的。
不知道这个属性是不是后来加的。
发表评论
-
浅析Java语言中两种异常的差别
2006-08-24 21:08 605Java提供了两类主要 ... -
JavaMail API详解
2006-09-04 17:12 584摘要:JavaMail API是读 ... -
JAVA操作Excel电子表格
2006-09-09 11:44 749只要有表格,就会有Microsoft Excel,用Micr ... -
让POI架起Java与Office之间的桥梁
2006-09-09 11:45 653本文将阐述如何用POI来 ... -
文件和目录操作的常用方法
2006-09-14 16:21 791package com.xgll.util; ... -
Java中正则表达式使用方法详解
2006-09-19 19:31 799如果你曾经用过Perl或任 ... -
在项目中,用到的关于时间操作的一些常用方法!!
2006-09-19 19:32 718package com.hoten.util; impor ... -
db4o 连接池
2006-09-28 17:19 737这几天花了点时间弄了个 db4o 连接池,比较简单,连接池原型 ... -
java的md5加密类
2006-09-29 11:35 677MD5算法是将数据进行不可逆加密的算法有较好的安全性,在国内如 ... -
代码动态生成利器ASM
2006-11-04 11:05 908作者:薛谷雨 作 ... -
native2ascii用法
2006-11-21 14:54 679中文资源转换成utf-8编码 native2ascii -en ... -
编写安全的Java代码
2006-12-29 20:47 640作者:Radic 来 ... -
常用 java File 操作类
2007-06-14 16:52 719业务常用,供大家学习: ... -
JAVA之精髓IO流
2007-06-20 21:49 468一. Input和Output 1. stream ... -
【此帖已结】常用数据库JDBC连接写法(整理)
2007-09-14 09:07 675为了方便大家查找,整 ... -
util包中Calendar和Properties用法:
2007-09-14 09:43 477import java.util.Calendar;impor ... -
JSP动作
2007-10-19 12:57 693JSP动作利用XML语法格式的标记来控制Servlet引擎的行 ... -
GBK和UTF-8的区别
2007-11-21 17:35 662GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字 ... -
Java多线程编程详解
2008-06-07 13:42 693一:理解多线程 多线程是这样一种机制,它允许在程序中并发执行 ... -
判定文件编码或文本流编码的方法
2008-06-16 14:44 875在程序中,文本文件经常用来存储标准的ASCII码文本,比 ...
相关推荐
7. **国际化(Internationalization, i18n)**:支持多语言,通过资源文件实现。 8. **自动化测试(Automated Testing)**:提供了JUnit和Mockito支持,便于编写单元测试。 通过理解和学习AppFuse的这些组件及其...
在"appfuse-light-webwork-spring-jdbc-1.8.2.zip"这个压缩包中,我们能看到一个基于Java 8、WebWork、Spring和JDBC的项目实例。 **Java 8** Java 8是Java平台的重大更新,引入了许多新特性,如lambda表达式、函数...
### AppFuse:加速J2EE项目开发 #### 一、简介与背景 AppFuse是一个用于启动J2EE项目的工具包,它提供了一种快速而简便的方法来构建基于Java的应用程序。该工具包由Matt Raible创建,他在网络开发领域拥有丰富的...
生成AppFuse项目时,可以通过执行特定的Maven命令来创建不同类型的项目,比如基于Struts、Spring或Hibernate的项目。这允许开发者根据项目需求选择最适合的框架组合,进一步提升开发效率。 总的来说,AppFuse通过...
它使用了多种流行的技术栈,如 Spring Boot、Hibernate、Thymeleaf 和 Maven,使得开发者可以更高效地开发基于 Java 的 Web 应用。在本文中,我们将深入了解如何安装并部署 AppFuse 项目。 **1. 预备知识** 在开始...
【jbpm 项目实践 1.2 集成appfuse spring modules】 jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套工具和服务,用于管理业务流程。在jbpm 1.2的实践中,我们将讨论如何集成...
AppFuse 2.1 版本是该项目的一个较早版本,但仍然包含了现代Web开发的核心技术,如Spring MVC和Hibernate4。 Spring MVC 是Spring框架的一部分,是一个用于构建Web应用程序的模型-视图-控制器(MVC)框架。它允许...
AppFuse 是一个由 Matt Raible 创建的开源项目,旨在为...通过研究和使用 AppFuse,开发者不仅可以学习到如何整合这些流行的技术,还能了解到如何利用监听器进行初始化操作以及如何利用Spring进行依赖注入等最佳实践。
Appfuse 支持多种应用类型的配置,例如使用 JSF 或 Spring MVC 等技术栈。每种类型的配置命令略有不同: - **JSF Basic 配置命令** ```bash mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -...
总之,Appfuse开发教程涵盖了从创建数据库表到构建基于Struts的用户界面的全过程,利用了DAO、POJO、Spring和JUnit等技术,帮助开发者高效地构建Java Web应用程序。通过本教程,你可以了解到如何在Appfuse环境中进行...
【MAVEN 搭建APPFUSE】是一个关于使用Maven构建基于...总之,通过这个教程,你将掌握如何使用Maven与AppFuse相结合,高效地构建和管理Java Web应用,从而提升开发效率,减少重复工作,使你的项目更加规范和易于维护。
AppFuse是一个集成了众多当前最流行开源框架与工具(包括Hibernate、ibatis、Struts、Spring、DBUnit、Maven、Log4J、Struts Menu、Xdoclet、SiteMesh、OSCache、JUnit、JSTL等(现在还有lucene的,无敌了))于一身的...
AppFuse作为构建Web应用的基础框架,它整合了多种开源技术,如Spring、Hibernate、Apache Struts或Spring MVC等。Spring作为核心框架,负责管理应用的业务逻辑和依赖注入;Hibernate用于对象关系映射(ORM),简化...
密码:ilovejava.taobao.com
这个框架集成了Spring、Hibernate和Struts等主流技术,使得开发者能够迅速构建出符合MVC架构的应用。在最新的版本2.1.0-M2中,AppFuse 提供了基本(basic)和模块化(modular)两种类型的原型,以便于开发者根据项目...
这一特性是通过国际化(i18n)技术实现的,允许开发者轻松添加更多语言支持。 2. **新用户注册** 对于首次使用AppFuse系统的用户,需要先进行注册。点击登录页面的“申请”链接,用户会被导向注册页面。在这个页面,...
appfuse 有struts2+hibernate+spring的整合 springmvc+hibernate+spring的整合 多模块,但模块都有 学习开发参考使用非常方便 可以到官方下载最新版的,我只是把自己下载的打包整理一下 注意哈,都是基于maven的...