`
brucezhu
  • 浏览: 5764 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP/JSF的国际化(字符集)使用心得

    博客分类:
  • Web
阅读更多

这段时间自学了一下一些主流的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
0
2
分享到:
评论

相关推荐

    Java代码中使用JSP/JSF表达式语言EL

    Java代码中使用JSP/JSF表达式语言(EL,Expression Language)是Web开发中的一个核心概念,它允许开发者在页面上动态地访问和操作JavaBean或其他数据源的数据。EL提供了一种简洁的方式来读取和设置Java对象的属性,...

    jsp/jsf和XML/XSLT技术整合的精华

    jsp/jsf和XML/XSLT技术整合的精华 随着JSTL 1.0,JSP™ 2.0和JSF 1.0技术 的介入,JSP™技术已经成为一个成熟的主 流表现层技术,但是它还没有提供足够的灵 活性和模块化 。 服务器端Java™技术的发展 • 最新的...

    JSF国际化范例 源代码

    在这个“JSF国际化范例”中,我们重点探讨如何在JSF应用中实现多语言支持,即国际化(i18n)。这是一项关键功能,因为它允许应用程序为不同地区的用户提供本地化的体验。 国际化通常涉及以下几个核心概念: 1. **...

    jsf国际化

    一个例子:jsf国际化

    2007年图书:JSP_JSF_Tomcat Web编程从入门到精通

    《2007年图书:JSP_JSF_Tomcat Web编程从入门到精通》这本书主要涵盖了Java服务器页面(JSP)、JavaServer...通过阅读,你可以了解到如何结合使用JSP、JSF和Tomcat,创建功能丰富的Web应用程序,并提升自己的开发技能。

    JSF2中实现国际化

    在JavaScriptServer Faces (JSF) 2.x版本中,实现国际化是一项重要的功能,它使得应用程序能够根据用户所在的地区提供相应的语言支持。这篇文章将探讨如何在JSF 2中实现国际化,以便为全球用户提供更好的用户体验。 ...

    JSF+HTML标签总结

    例如,`&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;`导入了JSF核心库,`prefix="f"`定义了前缀,使得我们可以使用`&lt;f:...&gt;`来调用该库中的标签。 1. `h:inputTextarea`是JSF中的文本区域组件,其...

    Beginning JSP,JSF and Tomcat 书中源码

    Beginning JSP,JSF and Tomcat 书中源码 Beginning JSP,JSF and Tomcat 书中源码

    JSP和JSF合并 打造完美的Web层应用

    总的来说,JSP与JSF的组合提供了强大的Web应用开发能力,既保留了JSP的后端处理能力,又引入了JSF的组件化和事件驱动机制,以及对MVC模式的支持。这种结合使得开发者能够构建出既高效又易于维护的Web层应用,充分...

    在JSP中用JSF组件

    JSF组件包含若干个Java类和配置文件。为创建一个自定义JSF组件,您需要开发一个扩展JSF基本组件类的Java类;为默认呈现软件包开发呈现程序;开发一个将在JSP页面中用于描述标签的Java类;编写一个标签库定义(TLD)...

    JSF-api-1.2_14-sources.jar

    JSF-api-1.2_14-sources.jar,提供了jsf使用时的多种内部类。

    jsf实现多语言国际化demo

    在JavaScript Server Faces (JSF) 中,实现多语言国际化是一项重要的功能,它允许应用程序为不同地区的用户提供本地化的体验。JSF 提供了内置的支持来处理国际化,使得开发者能够轻松地根据用户的选择或浏览器设置来...

    JSP和JSF合并 共同打造完美的Web应用

    JSF提供了一种组件化的方法来创建Web页面,使得开发人员可以使用可视化的开发工具,通过拖放组件的方式来构建页面,极大地简化了前端开发的复杂性。JSF1.2已经成为Java EE 5的标准组件。 **组件化开发** JSF的核心...

    JSP和JSF合并+打造完美的Web层应用

    这样做不仅可以保持JSF的结构化和组件化,还能利用JSP的灵活性增强用户体验。 在实现这种融合时,需要注意以下几点: 1. **组件集成**:JSF组件可以在JSP页面中使用,反之亦然。使用`&lt;jsp:include&gt;`标签可以将JSF...

    JSF标签,JSF的使用

    API提供了丰富的功能,如UI组件的表示、组件状态管理、事件处理、输入验证和国际化支持。而JSP标签库则让开发者可以在JSP页面中方便地使用这些功能,构建出复杂的用户界面。 在JSF中,导航规则是控制应用内页面跳转...

    jsp,jsF.and tomcat 书籍

    JSF使用Facelets作为默认的视图描述语言,支持组件化开发,与JavaBeans和EJB等Java EE技术无缝集成。 Tomcat是一款开源的Servlet容器,它是Apache软件基金会Jakarta项目的一部分。Tomcat实现了Java Servlet和Java...

    ADF(JSF)框架中使用国际化

    当我们谈论"ADF(JSF)框架中使用国际化"时,我们指的是如何使应用程序能够支持多种语言,以便全球用户都能方便地使用。 在ADF和JSF中实现国际化通常涉及到以下几个关键步骤和知识点: 1. **资源bundle**:国际化...

    beginning_jsp_jsf_and_tomcat_2nd_edition.pdf

    此外,JSF还提供了数据绑定、验证、国际化等功能,大大简化了Web应用程序的开发和维护工作。 ### Tomcat服务器 Apache Tomcat是一个开源的Servlet容器,它支持JSP、Servlet以及JSF等Java EE标准。Tomcat被广泛应用...

Global site tag (gtag.js) - Google Analytics