- 浏览: 157336 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lovelimx:
最后一个java文件第37行 orignal = new S ...
JAVA笔试面试必考题系列(六)——字符串(String)杂谈 -
ponlya:
下午又去下了个eclipse3.4,再按这方法,ok了。谢谢楼 ...
eclipse 3.4 下配置 Hibernate tool工具 -
ponlya:
如楼主所说的第1,2步,我在第3步中怎么得不到那个文件夹?换用 ...
eclipse 3.4 下配置 Hibernate tool工具 -
chinaboby2008:
...
JBoss目录结构说明 -
chinaboby2008:
这是java中的j2se部分。是java的基础呢。
有关Java容器的基础知识
国际化的问题有多种实现方法,由于项目需要,最近研究了下,不敢独享。
以下是步骤
1.建立资源bundle文件(以下文件必须建立在src目录下,我放在com.talgroup.international.quotation包下面)
首先建立 UIResources_en_US.txt
Index=Index: UserCode=User Code: UserRole=User Role: Password=Password: UserGroup=User Group: Login=Login Test=?,<>.;:'"{}()#$%&*@ !^/ |
UIResources_zh_CN.txt
Index=序列号: UserCode=用户名: UserRole=用户角色: Password=密码: UserGroup=用户组: Login=登陆 Test=?,<>.;:'"{}()无悔一腔血 有意济苍生#$%&*@ !^/ |
然后建立 转码程序
native2ascii(en-us).bat
native2ascii -encoding TIS-620 UIResources_en_US.txt > UIResources_en_US.properties |
native2ascii(zh-cn).bat
native2ascii -encoding gb2312 UIResources_zh_CN.txt > UIResources_zh_CN.properties |
最后 运行两个批处理程序,产生两个properties文件
2.spring 的application-context.xml文件中配置资源bundle文件
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>com.talgroup.international.quotation.UIResources</value>
</property>
</bean>
3.建立后台bean
package com.talgroup.web.quotation.ui;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.web.util.JavaScriptUtils;
import org.springframework.web.util.HtmlUtils;
public class InternationalBean {
private static String lan="en_US";
private static String jsStr=null;
private static String htmlStr=null;
// ApplicationContext context= new FileSystemXmlApplicationContext("/WEB-INF/resource-config.xml");
private static org.springframework.context.support.ResourceBundleMessageSource context = (org.springframework.context.support.ResourceBundleMessageSource)com.talgroup.app.frmwork.Context.getBean("messageSource");
public String getLan() {
return lan;
}
public void setLan(String lan) {
this.lan = lan;
}
public String zh_CN_Action()
{
this.setLan("zh_CN");
return null;
}
public String zh_HK_Action()
{
this.setLan("zh_HK");
return null;
}
public String en_US_Action()
{
this.setLan("en_US");
return null;
}
public static Locale mapStrToLocale(String lan)
{
if(lan.equals("zh_CN")) return Locale.CHINA;
if(lan.equals("en_US")) return Locale.US;
return Locale.US;
}
public static String JavaScriptEscape(String arg)
{
String str = context.getMessage(arg, null, mapStrToLocale(lan));
jsStr = JavaScriptUtils.javaScriptEscape(str);
return jsStr;
}
public static String HtmlEscape(String arg)
{
String str = context.getMessage(arg, null, mapStrToLocale(lan));
//htmlStr = HtmlUtils.htmlEscape(str);
return str;
}
}
4.jsf的face-config.xml中注册管理bean,session级别
<managed-bean>
<managed-bean-name>internationalBean</managed-bean-name>
<managed-bean-class>
com.talgroup.web.quotation.ui.InternationalBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
5.页面表现层
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:z="http://www.qualcomm.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:talui="http://www.talgroup.com/tags"
xmlns:quot="http://www.talgroup.com/quotation/tags"
xmlns:js="http://www.talgroup.com/quotation/tags"
xmlns:html="http://www.talgroup.com/quotation/tags">
<head>
<meta http-equiv="PRAGMA" content="no-cache" />
</head>
<body>
<div id="wrapper" align="center">
<h:form>
<div style="width: 620" align="right">
<h:panelGrid columns="8">
<h:commandLink value="chinese"
style="color:black;font-family:Courier;font-size:10pt;width:120"
action="#{internationalBean.zh_CN_Action}">
</h:commandLink>/
<h:commandLink value="chinese-hk"
style="color:black;font-family:Courier;font-size:10pt;width:120"
action="#{internationalBean.zh_HK_Action}">
</h:commandLink>/
<h:commandLink value="english"
style="color:black;font-family:Courier;font-size:10pt;width:120"
action="#{internationalBean.en_US_Action}">
</h:commandLink>
<h:outputLink id="link1" value="http://www.yourcompany.com">
<h:outputText value="Perferences"
style="color:black;font-family:Courier;font-size:10pt;width:120" />
</h:outputLink>
<h:outputLink id="link2" value="http://www.yourcompany.com">
<h:outputText value="Help"
style="color:black;font-family:Courier;font-size:10pt;width:60" />
</h:outputLink>
<h:outputLink id="link3" value="http://www.yourcompany.com">
<h:outputText value="Contect us"
style="color:black;font-family:Courier;font-size:10pt;width:100" />
</h:outputLink>
</h:panelGrid>
</div>
</h:form>
<h1 id="brandBar">
#{loginBeanWithRoleAndGroup.title}
</h1>
<h:form id="loginForm">
<h:messages layout="table" errorStyle="color: red"></h:messages>
<h:panelGrid columns="5" width="700">
<h:panelGroup>
<h:outputText
style="color:black;font-family:Courier;font-size:10pt;width: 180px"
value="#{html:HtmlEscape('Index')}" />
</h:panelGroup>
<h:panelGroup>
<h:selectOneMenu id="appCode"
value="#{loginBeanWithRoleAndGroup.appCode}" required="true"
style="width: 140px">
<f:selectItems value="#{loginBeanWithRoleAndGroup.applications}" />
<a4j:support event="onchange" reRender="loginForm_userCode"
ajaxSingle="true"
action="#{loginBeanWithRoleAndGroup.lookUpUserByApplication}" />
</h:selectOneMenu>
</h:panelGroup>
<h:panelGroup>
<h:outputText value="" style="width: 50px"></h:outputText>
</h:panelGroup>
<h:panelGroup>
<h:outputText value=""></h:outputText>
</h:panelGroup>
<h:panelGroup>
<h:outputText value=""></h:outputText>
</h:panelGroup>
<h:panelGroup>
<h:outputText
style="color:black;font-family:Courier;font-size:10pt;width: 180px"
value="#{html:HtmlEscape('UserCode')}" />
</h:panelGroup>
<h:panelGroup id="loginForm_userCode">
<h:selectOneMenu id="userCode"
value="#{loginBeanWithRoleAndGroup.userCode}" required="true"
style="width: 140px">
<c:if test="${!empty loginBeanWithRoleAndGroup.users}">
<f:selectItems value="#{loginBeanWithRoleAndGroup.users}" />
</c:if>
<a4j:support event="onchange"
reRender="loginForm_userRole,loginForm_userGroup"
ajaxSingle="true"
action="#{loginBeanWithRoleAndGroup.lookUpUserRoleAndGroup}" />
</h:selectOneMenu>
</h:panelGroup>
<h:panelGroup>
<h:outputText value=""></h:outputText>
</h:panelGroup>
<h:panelGroup style="width: 167px">
<h:outputText
style="color:black;font-family:Courier;font-size:10pt;width: 155px"
value="#{html:HtmlEscape('UserRole')}" />
</h:panelGroup>
<h:panelGroup id="loginForm_userRole">
<h:selectOneMenu value="#{loginBeanWithRoleAndGroup.userRole}"
required="true" style="width: 140px">
<c:if test="${!empty loginBeanWithRoleAndGroup.roles}">
<f:selectItems id="fddd"
value="#{loginBeanWithRoleAndGroup.roles}" />
</c:if>
</h:selectOneMenu>
</h:panelGroup>
<h:panelGroup>
<h:outputText
style="color:Black;font-family:Courier;font-size:10pt;width: 180px"
value="#{html:HtmlEscape('Password')}" />
</h:panelGroup>
<h:panelGroup>
<h:inputSecret id="password"
value="#{loginBeanWithRoleAndGroup.password}" required="true"
requiredMessage="Password can not be empty" style="width: 125px" />
</h:panelGroup>
<h:panelGroup>
<h:outputText value=""></h:outputText>
</h:panelGroup>
<h:panelGroup>
<h:outputText
style="color:black;font-family:Courier;font-size:10pt;width: 155px"
value="#{html:HtmlEscape('UserGroup')}" />
</h:panelGroup>
<h:panelGroup id="loginForm_userGroup">
<h:selectOneMenu value="#{loginBeanWithRoleAndGroup.userGroup}"
required="false" style="width: 140px">
<c:if test="${!empty loginBeanWithRoleAndGroup.groups}">
<f:selectItems id="dsd"
value="#{loginBeanWithRoleAndGroup.groups}" />
</c:if>
</h:selectOneMenu>
</h:panelGroup>
<f:verbatim></f:verbatim>
<h:outputText style="width:170px" value="" />
<h:outputText style="width:170px" value="" />
<h:outputText style="width:170px" value="" />
<h:outputText style="width:170px" value="" />
<h:panelGroup>
<h:inputText style="width:0px;visibility:hidden" id="dsdasdsa"
value="if you remove, you will get error" />
<h:commandButton style="width:130px;" value="#{html:HtmlEscape('Login')}"
action="#{loginBeanWithRoleAndGroup.loginAction}"></h:commandButton>
</h:panelGroup>
<h:panelGroup>
<h:outputText style="width:170px" value="" />
</h:panelGroup>
<h:panelGroup>
<h:outputText style="width:170px" value="" />
</h:panelGroup>
<h:panelGroup>
<h:outputText style="width:170px" value="" />
</h:panelGroup>
</h:panelGrid>
<h:panelGrid columns="1" width="150">
<h:panelGroup style="height: 20px;">
<f:verbatim>
<DIV id="dynamicParameters" style="visibility: hidden;">
</DIV>
</f:verbatim>
</h:panelGroup>
</h:panelGrid>
</h:form>
</div>
<br>
alert test---
<input type="button" value="click" onclick="alert('#{js:JavaScriptEscape('Test')}')"/>
</br>
<br>
html test---
<h:outputText style="width:170px" value="#{html:HtmlEscape('Test')}"/>
</br>
<h:outputText style="width:170px" value="#{html:HtmlEscape('Test')}"/>
</body>
</html>
ps:
xmlns:js="http://www.talgroup.com/quotation/tags" 和xmlns:html="http://www.talgroup.com/quotation/tags">
是我自定义的两个标签,它主要是用来接受页面传过来的键值(例如:Index,UserCode。。。)将它传到后台bean(InternationalBean)中,然后根据这个键值去资源文件中查找相应的message值,最后返回到页面显示,当然这里面涉及到特殊字符转义的问题,这在bean里面都做了处理了。
至于标签如何定义,如何传参数,由于篇幅原因,我将在下一篇文章中做详细的介绍。
发表评论
-
OSI七层模型与 TCP/IP五层模型 TCP/UDP的区别
2010-12-27 18:53 5399OSI七层模型与 TCP/IP五层 ... -
http get post的区别
2010-03-12 11:40 1864定义了与服务器交互的不同方法,最基本的方法是 GET 和 PO ... -
动态增加行 js代码
2010-03-11 16:50 1282<!DOCTYPE HTML PUBLI ... -
全面总结Java泛型
2010-02-23 17:51 898虽然Scala创始人Martin Odersky说当年正是因为 ... -
Java运行时多态性:继承和接口的实现
2010-02-23 17:48 1295Java是面向对象的语言,而运行时多态性是面向对象程序设计代码 ... -
各种集合对比
2010-02-22 17:41 898Collections和Collection的区别 Col ... -
WEB应用中的servlet的 service,doPost,doGet方法的关系
2010-02-22 17:33 1951WEB应用中的servlet的 service,doPost, ... -
Hibernate 缓存机制(二)
2010-02-07 21:47 1064为什么使用hibernate 1、对JDBC操作提供封装, ... -
Hibernate 缓存机制
2010-02-07 21:23 730缓存是介于应用程序和 ... -
J2EE JVM调优 优化
2009-10-19 18:05 931JVM参数调优是一个很头 ... -
eclipse 3.4 下配置 Hibernate tool工具
2009-09-14 17:08 2145http://www.51taobaogood.cn 1. ... -
Valang Validator学习实例入门
2009-09-14 15:48 1386Valang Validator 是较为新颖的插件,在参考胡键 ... -
JavaBean之间拷贝利器-Dozer
2009-09-14 15:42 1886JavaBean之间拷贝利器-Doze ... -
Download and crack Jprobe 8.0
2009-06-15 14:27 3343(转)Download and crack Jprobe 8 ... -
spring获得ApplicationContext
2009-06-08 17:06 20901.servlet Spring获取ApplicationC ... -
操作properties文件总结
2009-06-08 17:00 9921.spring读取 ////////////////// ... -
软件版本GA,RC,Demo,Build意思
2009-05-25 10:48 850转自 http://blog.chinaunix.ne ... -
选择Java接口还是抽象类
2009-05-11 16:43 940很多人有过这样的疑问 ... -
有关Java容器的基础知识
2009-05-08 15:04 1194Java中容器是Java3中比较 ... -
Java性能优化小技巧
2009-05-08 10:35 9361.1.在创建对象时能不用new关健字的最好不要用new创建新 ...
相关推荐
JSF主要用于构建用户界面,而Spring则提供全面的企业级应用支持,包括依赖注入、事务管理、安全控制等。当这两者结合时,可以创建出功能强大且灵活的Web应用程序。下面将详细介绍如何实现JSF与Spring的完美集成,...
在"jsf_02_spring"这个压缩包中,可能包含了以下内容: - `src/main/java`:存放Java源代码,包括JSF Managed Beans和Spring Bean。 - `src/main/webapp`:存放Web应用的资源,如JSF的XHTML页面、CSS、JavaScript...
jsf与spring的集成的几种方式,以及jsf的一些技术
这个压缩包通常包含了用于快速搭建JSF应用在Spring Boot环境中的必要组件和配置。 【描述】"scalafmt.zip,CoreThis回购现在是-->" 这句话可能稍有误导,因为描述中提到了"scalafmt.zip",这通常与Scala相关的...
JSF主要用于构建用户界面,而Spring则提供了全面的企业级应用框架服务,包括依赖注入、事务管理、安全性和AOP(面向切面编程)。将两者整合可以利用它们各自的优势,创建出高效、模块化的Web应用程序。 **JSF简介**...
3. **Web应用结构**:可能有`WEB-INF`目录,包含`web.xml`,这是Servlet容器的部署描述符,可能会配置JSF和Spring的初始化参数。 4. **Maven或Gradle配置**:如果是开源项目,可能包含`pom.xml`或`build.gradle`,...
【标题】"qt.rar" 提供的是一个关于 "jsf example" 的实例,结合了 "jsf spring hibernate" 的技术栈,同时包含了 "jsf下拉菜单" 的实现,以及 "spring jsf hibernate" 的整合应用。这个压缩包可能是为了演示如何在...
Spring Framework 提供了一个全面的开发工具集,包括依赖注入、AOP(面向切面编程)、事务管理等,它支持多种持久化策略,如 JDBC、JPA 或 Hibernate。Hibernate 则是一个对象关系映射 (ORM) 工具,能够将 Java 类与...
具体来说,Spring 的 `ApplicationContext` 类对于 web 应用非常关键,它不仅包含了 Spring 管理的所有 bean,还封装了 `javax.servlet.ServletContext`。而 JSF 通过 `FacesContext` 类也可以访问到 ServletContext...
JSF主要用于构建用户界面,而Spring则提供了全面的企业级应用框架服务,包括依赖注入、面向切面编程、事务管理等。 首先,JSF是一个MVC(Model-View-Controller)框架,它简化了创建用户界面的过程。JSF的核心组件...
在这个JSF国际化范例中,源代码很可能会包括以下部分: - 不同语言版本的资源文件(如`messages_en.properties`,`messages_zh_CN.properties`) - XHTML视图文件,展示如何引用资源文件中的消息 - Managed Bean,...
例如,JSF负责展示层,Spring管理业务逻辑和服务,而Hibernate处理数据持久化。AJAX则提升了用户界面的响应速度和交互体验。 在"JSF第一步--JSF+Spring+Hibernate+AJAX编程实践 试读"这本书中,读者可以期待学习...
总的来说,"jsf2+spring sample"项目展示了如何在同一个应用中利用JSF2的强大组件化UI特性和Spring的灵活业务处理能力,实现高效且易于维护的Web应用。通过学习这个示例,开发者可以更好地理解两者的协同工作方式,...
例如,JSF的组件化UI使得前端开发更加直观,Spring的AOP和事务管理让业务逻辑更清晰,而Mybatis的直接SQL操作则提升了数据库访问的效率。总的来说,这个项目展示了如何利用这些技术构建一个健壮、高效的Java Web应用...
在JavaScriptServer Faces (JSF) 2.x版本中,实现国际化是一项重要的功能,它使得应用程序能够根据用户所在的地区提供相应的语言支持。这篇文章将探讨如何在JSF 2中实现国际化,以便为全球用户提供更好的用户体验。 ...
总的来说,"JSF Spring Hibernate2"项目是一个结合了前端展示、后端服务和持久化层的复杂Web应用,它展示了Java技术栈在企业级应用开发中的强大能力。通过深入理解和熟练掌握这些技术,开发者可以构建出高效、稳定且...
总结来说,"jsf+spring+hibernate" 的组合为开发者提供了一个强大而灵活的框架,能够有效地处理复杂的 Web 应用场景,包括用户认证、数据操作和业务流程控制。通过合理的设计和配置,可以构建出高效、可扩展的应用...
1. **业务逻辑处理**:Spring作为中央容器,管理所有bean,包括JSF的后台Managed Beans和Hibernate的数据访问对象(DAO)。Spring的DI使得组件之间可以松散耦合,方便维护和扩展。 2. **数据持久化**:Hibernate负责...
1. **配置Spring**:首先,我们需要在Spring配置文件中定义Bean,包括JSF Managed Beans和Hibernate Session Factory。Bean的定义可以是XML配置或基于注解的方式。 2. **JSF与Spring的整合**:为了使JSF能够使用...