这段时间自学了一下一些主流的web框架,期间涉及到JSP/JSF的的国际化(字符集)问题,让我很是头疼,所以现在把一些使用心得总结一下,希望让后来人少走一些弯路,如有不对的地方,也请大家指正。
首先讲一下JSP的国际化(字符集)问题:
一. JSP文件中hardcode的非英语字符
1.1 当然先要把JSP文件格式保存成UTF-8
1.2 JSP头部声明,如下:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Html的meta声明,如下:
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
二. request和response中的非英语字符
2.1 使用Filter,代码如下:
public class EncodingFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
chain.doFilter(req, resp);
}
public void init(FilterConfig cfg) throws ServletException {
}
public void destroy() {
}
}
2.2 request参数的取得(Tomcat 6.0.14)
String param = new String(req.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
也可以修改Tomcat的配置文件server.xml中,形如:
<Connector ... URIEncoding="UTF-8"/>
三. JSP页面国际化
3.1 编写properties文件,使用JInto(Eclipse插件),使用方法见截图
也可以手写properties文件,再用native2ascii 转换
先写三个properties文件,用语言和国家代号区分
sample_zh_CN.properties
sample_en_US.properties
sample_ja_JP.properties
在properties文件中直接写相应的语言,中文的写中文,英文的写英文,日文的写日文
写完后再用native2ascii 转换
native2ascii -encoding UTF-8 sample_zh_CN.properties sample_zh_CN_result.properties
3.2 使用JSTL在JSP上显示多国语
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!-- set locale -->
<fmt:setLocale value="zh_CN"/>
<!-- global(default) resource bundle-->
<fmt:setBundle basename="view"/>
<!-- get resource by key reference to global(default) resource bundle-->
<fmt:message key="login"/>
最后讲一下JSF中的国际化(字符集)问题:
首先,JSP的处理方案可以完全照搬到JSF上,一字不改,一样可以运行,这里只要讲述使用JSF的backing bean(managed-bean)设置页面Locale
一. JSF的faces-config.xml设置resource bundle
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<application>
<resource-bundle>
<base-name>view</base-name>
<var>scr</var>
</resource-bundle>
</application>
也可以直接在JSF文件中写
<f:loadBundle basename="view" var="src"/>
二. 在JSF文件中设置locale
<f:view locale="zh_CN">
这样JSF页面也能正常显示非英文字符。
下面问题来了,页面多国语切换!
JSP(JSTL)中很容易,如下
<fmt:setLocale value="${locale}"/>
只要在session中存一个locale变量,随时改变,页面上的<fmt:message>标签就会自动变化
但是,JSF中使用managed-bean就完全不行,不是换不了,就是乱换
代码如下,要是哪位有解决方案,请指教
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<application>
<resource-bundle>
<base-name>view</base-name>
<var>scr</var>
</resource-bundle>
</application>
<managed-bean>
<managed-bean-name>localBean</managed-bean-name>
<managed-bean-class>LocalBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>locale</property-name>
<value>en_US</value>
</managed-property>
</managed-bean>
</faces-config>
public class LocalBean {
private String locale;
public String getLocale() {
return locale;
}
public void setLocale(String locale) {
this.locale = locale;
}
public void setLang() {
}
}
<f:view locale="#{localBean.locale}">
<h:form>
<h:selectOneRadio value="#{localBean.locale}">
<f:selectItem itemLabel="CHN" itemValue="zh_CN"/>
<f:selectItem itemLabel="ENG" itemValue="en_US"/>
<f:selectItem itemLabel="JPN" itemValue="ja_JP"/>
</h:selectOneRadio>
<h:commandButton value="action" action="#{localBean.setLang}"/>
</h:form>
<h1><h:outputText value="#{scr.login}" /></h1>
</f:view>
最后,我在网上看到一篇关于字符集问题文章,写的不错,大家有空可以看看。
http://china.manufacturer.com/article/study_for_character_encoding_java.htm
- 描述: JInto截图3
- 大小: 176.3 KB
- 描述: JInto截图2
- 大小: 37.4 KB
- 描述: JInto截图1
- 大小: 34.1 KB
分享到:
相关推荐
Java代码中使用JSP/JSF表达式语言(EL,Expression Language)是Web开发中的一个核心概念,它允许开发者在页面上动态地访问和操作JavaBean或其他数据源的数据。EL提供了一种简洁的方式来读取和设置Java对象的属性,...
jsp/jsf和XML/XSLT技术整合的精华 随着JSTL 1.0,JSP™ 2.0和JSF 1.0技术 的介入,JSP™技术已经成为一个成熟的主 流表现层技术,但是它还没有提供足够的灵 活性和模块化 。 服务器端Java™技术的发展 • 最新的...
在这个“JSF国际化范例”中,我们重点探讨如何在JSF应用中实现多语言支持,即国际化(i18n)。这是一项关键功能,因为它允许应用程序为不同地区的用户提供本地化的体验。 国际化通常涉及以下几个核心概念: 1. **...
一个例子:jsf国际化
《2007年图书:JSP_JSF_Tomcat Web编程从入门到精通》这本书主要涵盖了Java服务器页面(JSP)、JavaServer...通过阅读,你可以了解到如何结合使用JSP、JSF和Tomcat,创建功能丰富的Web应用程序,并提升自己的开发技能。
在JavaScriptServer Faces (JSF) 2.x版本中,实现国际化是一项重要的功能,它使得应用程序能够根据用户所在的地区提供相应的语言支持。这篇文章将探讨如何在JSF 2中实现国际化,以便为全球用户提供更好的用户体验。 ...
例如,`<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>`导入了JSF核心库,`prefix="f"`定义了前缀,使得我们可以使用`<f:...>`来调用该库中的标签。 1. `h:inputTextarea`是JSF中的文本区域组件,其...
Beginning JSP,JSF and Tomcat 书中源码 Beginning JSP,JSF and Tomcat 书中源码
总的来说,JSP与JSF的组合提供了强大的Web应用开发能力,既保留了JSP的后端处理能力,又引入了JSF的组件化和事件驱动机制,以及对MVC模式的支持。这种结合使得开发者能够构建出既高效又易于维护的Web层应用,充分...
JSF组件包含若干个Java类和配置文件。为创建一个自定义JSF组件,您需要开发一个扩展JSF基本组件类的Java类;为默认呈现软件包开发呈现程序;开发一个将在JSP页面中用于描述标签的Java类;编写一个标签库定义(TLD)...
JSF-api-1.2_14-sources.jar,提供了jsf使用时的多种内部类。
在JavaScript Server Faces (JSF) 中,实现多语言国际化是一项重要的功能,它允许应用程序为不同地区的用户提供本地化的体验。JSF 提供了内置的支持来处理国际化,使得开发者能够轻松地根据用户的选择或浏览器设置来...
JSF提供了一种组件化的方法来创建Web页面,使得开发人员可以使用可视化的开发工具,通过拖放组件的方式来构建页面,极大地简化了前端开发的复杂性。JSF1.2已经成为Java EE 5的标准组件。 **组件化开发** JSF的核心...
这样做不仅可以保持JSF的结构化和组件化,还能利用JSP的灵活性增强用户体验。 在实现这种融合时,需要注意以下几点: 1. **组件集成**:JSF组件可以在JSP页面中使用,反之亦然。使用`<jsp:include>`标签可以将JSF...
API提供了丰富的功能,如UI组件的表示、组件状态管理、事件处理、输入验证和国际化支持。而JSP标签库则让开发者可以在JSP页面中方便地使用这些功能,构建出复杂的用户界面。 在JSF中,导航规则是控制应用内页面跳转...
JSF使用Facelets作为默认的视图描述语言,支持组件化开发,与JavaBeans和EJB等Java EE技术无缝集成。 Tomcat是一款开源的Servlet容器,它是Apache软件基金会Jakarta项目的一部分。Tomcat实现了Java Servlet和Java...
当我们谈论"ADF(JSF)框架中使用国际化"时,我们指的是如何使应用程序能够支持多种语言,以便全球用户都能方便地使用。 在ADF和JSF中实现国际化通常涉及到以下几个关键步骤和知识点: 1. **资源bundle**:国际化...
此外,JSF还提供了数据绑定、验证、国际化等功能,大大简化了Web应用程序的开发和维护工作。 ### Tomcat服务器 Apache Tomcat是一个开源的Servlet容器,它支持JSP、Servlet以及JSF等Java EE标准。Tomcat被广泛应用...