`
yanghaoli
  • 浏览: 284632 次
社区版块
存档分类
最新评论

struts标签+jstl标签之国际化实例

 
阅读更多

 Struts提供了国际化的功能,对于一个面向各国的系统来说,是非常有帮助的。只需要提供每个国家的语言资源包,配置后即可使用。

 

      下面来用一个登录实例来演示一下Struts的国际化配置和显示。

 

      创建一个login_i18n_exception的javaweb项目,引入Struts的所有jar包以及jstl.jar和standard.jar。登录界面无非就是输入用户名,密码,所以ActionForm中只需要设置2个属性即可。

 

  1. package com.bjpowernode.struts;  
  2.   
  3. import org.apache.struts.action.ActionForm;  
  4.   
  5. /** 
  6.  * 登录ActionForm,负责收集表单数据 
  7.  * 表单的数据必须和ActionForm的get,set一致 
  8.  * @author Longxuan 
  9.  * 
  10.  */  
  11. @SuppressWarnings("serial")  
  12. public class LoginActionForm extends ActionForm {  
  13.   
  14.     private String username;  
  15.       
  16.     private String password;  
  17.       
  18.     public String getUsername() {  
  19.         return username;  
  20.     }  
  21.     public void setUsername(String username) {  
  22.         this.username = username;  
  23.     }  
  24.     public String getPassword() {  
  25.         return password;  
  26.     }  
  27.     public void setPassword(String password) {  
  28.         this.password = password;  
  29.     }  
  30.       
  31. }  

 

      登录时会验证密码是否正确,需要提供异常处理,本实例显示2个异常:用户名未找到,密码错误。

 

  1. package com.bjpowernode.struts;  
  2. /** 
  3.  * 密码错误异常 
  4.  * @author Longxuan 
  5.  * 
  6.  */  
  7. @SuppressWarnings("serial")  
  8. public class PasswordErrorException extends RuntimeException {  
  9.   
  10.     public PasswordErrorException() {  
  11.         // TODO Auto-generated constructor stub  
  12.     }  
  13.   
  14.     public PasswordErrorException(String message) {  
  15.         super(message);  
  16.         // TODO Auto-generated constructor stub  
  17.     }  
  18.   
  19.     public PasswordErrorException(Throwable cause) {  
  20.         super(cause);  
  21.         // TODO Auto-generated constructor stub  
  22.     }  
  23.   
  24.     public PasswordErrorException(String message, Throwable cause) {  
  25.         super(message, cause);  
  26.         // TODO Auto-generated constructor stub  
  27.     }  
  28.   
  29.     public PasswordErrorException(String message, Throwable cause,  
  30.             boolean enableSuppression, boolean writableStackTrace) {  
  31.         super(message, cause, enableSuppression, writableStackTrace);  
  32.         // TODO Auto-generated constructor stub  
  33.     }  
  34.   
  35. }  
  36.   
  37.   
  38.   
  39. package com.bjpowernode.struts;  
  40. /** 
  41.  * 用户未找到异常 
  42.  * @author Longxuan 
  43.  * 
  44.  */  
  45. @SuppressWarnings("serial")  
  46. public class UserNotFoundException extends RuntimeException {  
  47.   
  48.     public UserNotFoundException() {  
  49.         // TODO Auto-generated constructor stub  
  50.     }  
  51.   
  52.     public UserNotFoundException(String message) {  
  53.         super(message);  
  54.         // TODO Auto-generated constructor stub  
  55.     }  
  56.   
  57.     public UserNotFoundException(Throwable cause) {  
  58.         super(cause);  
  59.         // TODO Auto-generated constructor stub  
  60.     }  
  61.   
  62.     public UserNotFoundException(String message, Throwable cause) {  
  63.         super(message, cause);  
  64.         // TODO Auto-generated constructor stub  
  65.     }  
  66.   
  67.     public UserNotFoundException(String message, Throwable cause,  
  68.             boolean enableSuppression, boolean writableStackTrace) {  
  69.         super(message, cause, enableSuppression, writableStackTrace);  
  70.         // TODO Auto-generated constructor stub  
  71.     }  
  72.   
  73. }  


      提供用户管理类,处理用户的相关操作,这里主要处理用户登录:

 

 

  1. package com.bjpowernode.struts;  
  2. /** 
  3.  * 用户管理类 
  4.  * @author Longxuan 
  5.  * 
  6.  */  
  7. public class UserManager {  
  8.       
  9.     /** 
  10.      * 简单处理登录逻辑 
  11.      * @param username  用户名 
  12.      * @param password  密码 
  13.      */  
  14.     public void login(String username,String password){  
  15.           
  16.         if(!"admin".equals(username)){  
  17.             throw new UserNotFoundException();  
  18.         }  
  19.         if(! "admin".equals(password)){  
  20.             throw new PasswordErrorException();  
  21.         }  
  22.     }  
  23. }  


      现在写LoginAction的处理:

 

 

  1. package com.bjpowernode.struts;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.apache.struts.action.Action;  
  7. import org.apache.struts.action.ActionForm;  
  8. import org.apache.struts.action.ActionForward;  
  9. import org.apache.struts.action.ActionMapping;  
  10. import org.apache.struts.action.ActionMessage;  
  11. import org.apache.struts.action.ActionMessages;  
  12.   
  13. /** 
  14.  * 登录Action 负责取得表单数据,调用业务逻辑,返回转向信息 
  15.  *  
  16.  * @author Longxuan 
  17.  *  
  18.  */  
  19. public class LoginAction extends Action {  
  20.   
  21.     @Override  
  22.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  23.             HttpServletRequest request, HttpServletResponse response)  
  24.             throws Exception {  
  25.         //获取数据  
  26.         LoginActionForm laf = (LoginActionForm) form;  
  27.         String username = laf.getUsername();  
  28.         String password = laf.getPassword();  
  29.   
  30.         UserManager userManager = new UserManager();  
  31.         ActionMessages messages = new ActionMessages();  
  32.           
  33.         try {  
  34.             //用户登录  
  35.             userManager.login(username, password);  
  36.               
  37.             //获取登录成功的国际化消息  
  38.             ActionMessage success= new ActionMessage("login.success",username);  
  39.             messages.add("login_success_1",success);  
  40.               
  41.             //传递消息  
  42.             this.saveMessages(request, messages);  
  43.               
  44.             return mapping.findForward("success");  
  45.               
  46.         } catch (UserNotFoundException e) {  
  47.               
  48.             e.printStackTrace();  
  49.               
  50.             //获取登录成功的国际化消息  
  51.             ActionMessage error = new ActionMessage("login.user.not.found",username);  
  52.             messages.add("login_error_1",error);  
  53.               
  54.             //传递消息  
  55.             this.saveErrors(request, messages);           
  56.               
  57.         } catch (PasswordErrorException e) {  
  58.               
  59.             e.printStackTrace();  
  60.               
  61.             //获取登录成功的国际化消息  
  62.             ActionMessage error = new ActionMessage("login.user.password.error");  
  63.             messages.add("login_error_2",error);  
  64.               
  65.             //传递消息  
  66.             this.saveErrors(request, messages);  
  67.               
  68.         }         
  69.         return mapping.findForward("error");  
  70.     }  
  71.   
  72. }  



      来一个手动切换语言的类,方便演示:

 

 

  1. package com.bjpowernode.struts;  
  2.   
  3. import java.util.Locale;  
  4.   
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.   
  8. import org.apache.struts.action.Action;  
  9. import org.apache.struts.action.ActionForm;  
  10. import org.apache.struts.action.ActionForward;  
  11. import org.apache.struts.action.ActionMapping;  
  12.   
  13. /** 
  14.  * 完成语言的手动切换 
  15.  * @author Longxuan 
  16.  * 
  17.  */  
  18. public class ChangeLanguageAction extends Action {  
  19.   
  20.     @Override  
  21.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  22.             HttpServletRequest request, HttpServletResponse response)  
  23.             throws Exception {  
  24.           
  25.         //获取语言  
  26.         String lang = request.getParameter("lang");       
  27.         String[] split = lang.split("-");  
  28.           
  29.         //设置语言  
  30.         Locale locale = new Locale(split[0],split[1]);  
  31.         this.setLocale(request, locale);  
  32.   
  33.         return mapping.findForward("login");  
  34.     }     
  35. }  


      新建国际化信息文件:创建resource包,创建 英文语言包MessageBundle_en_US.properties,中文语言包MessageBundle_zh_CN.properties,默认语言包MessageBundle.properties 这3个语言包。具体内容如下:

 

英文语言包和默认语言包设置成一样的:

 

  1. # -- standard errors --  
  2. errors.header=<UL>  
  3. errors.prefix=<font color="red"><LI>  
  4. errors.suffix=</LI></font>  
  5. errors.footer=</UL>  
  6. login.form.field.username=User Name  
  7. login.form.field.password=Password  
  8. login.form.button.login=Login  
  9. login.success={0},Login Succedd!!  
  10. login.user.not.found=Use cant be found! Username=[{0}]  
  11. login.user.password.error=Password  Error!  

中文语言包:

  1. # -- standard errors --  
  2. errors.header=<UL>  
  3. errors.prefix=<font color="red"><LI>  
  4. errors.suffix=</LI></font>  
  5. errors.footer=</UL>  
  6. login.form.field.username=\u7528\u6237\u540D  
  7. login.form.field.password=\u5BC6\u7801  
  8. login.form.button.login=\u767B\u5F55  
  9. login.success={0}\uFF0C\u767B\u5F55\u6210\u529F\uFF01  
  10. login.user.not.found=\u7528\u6237\u672A\u627E\u5230\uFF0C\u7528\u6237\u540D\uFF1A\u3010{0}\u3011  
  11. login.user.password.error=\u5BC6\u7801\u9519\u8BEF  


      把login.jsp源码也贴出来:

 

 

  1. <%@ page language="java" contentType="text/html; charset=GB18030"  
  2.     pageEncoding="GB18030"%>  
  3. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>  
  4. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>  
  5. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>  
  6.   
  7. <!-- ${sessionScope['org.apache.struts.action.LOCALE']}可以获取到当前设置的语言 -->  
  8. <fmt:setLocale value="${sessionScope['org.apache.struts.action.LOCALE']}" />  
  9. <fmt:setBundle basename="resource.MessageBundle" />  
  10. <html>  
  11.     <head>  
  12.         <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
  13.         <title>Struts登录</title>  
  14.     </head>  
  15.     <body>  
  16.         <a href="changelang.do?lang=zh-cn">中文登录</a>|  
  17.         <%--<a href="changelang.do?lang=en-us">English Login</a><br>  
  18.     <html:link action="changelang.do?lang=zh-cn">中文登录</html:link>|--%>  
  19.         <html:link action="changelang.do?lang=en-us">English Login</html:link>  
  20.         <hr>  
  21.         <html:errors />  
  22.         <hr>  
  23.         <h3>  
  24.             struts标签读取国际化文件  
  25.         </h3>  
  26.   
  27.         <form action="login.do" method="post">  
  28.   
  29.             <bean:message key="login.form.field.username" />  
  30.             :  
  31.             <input type="text" name="username" />  
  32.             <br />  
  33.             <bean:message key="login.form.field.password" />  
  34.             :  
  35.             <input type="text" name="password" />  
  36.             <br />  
  37.             <input type="submit"  
  38.                 value="<bean:message key="login.form.button.login"/>/>  
  39.         </form>  
  40.         <hr>  
  41.         <h3>  
  42.             jstl读取国际化文件  
  43.         </h3>  
  44.         <form action="login.do" method="post">  
  45.             <fmt:message key="login.form.field.username" />  
  46.             :  
  47.             <input type="text" name="username" />  
  48.             <br />  
  49.             <fmt:message key="login.form.field.password" />  
  50.             :  
  51.             <input type="text" name="password" />  
  52.             <br />  
  53.             <input type="submit"  
  54.                 value="<fmt:message key="login.form.button.login"/>/>  
  55.         </form>  
  56.   
  57.     </body>  
  58. </html>  

login_success.jsp:

 

 

  1. <%@ page language="java" contentType="text/html; charset=GB18030"  
  2.     pageEncoding="GB18030"%>  
  3. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>  
  4. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <head>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
  9. <title>Insert title here</title>  
  10. </head>  
  11. <body>  
  12. <!-- message 属性设置为true,则读取message中的消息,false,则读取error中的消息。 saveMessages/saveErrors-->  
  13.     <html:messages id="msg" message="true">  
  14.         <bean:write name="msg"/>  
  15.     </html:messages>  
  16. </body>  
  17. </html>  


      最后的最后,在web.xml中配置一下struts:

 

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.   <welcome-file-list>  
  8.     <welcome-file>login.jsp</welcome-file>  
  9.   </welcome-file-list>  
  10.   <servlet>  
  11.     <servlet-name>action</servlet-name>  
  12.     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  13.     <init-param>  
  14.       <param-name>config</param-name>  
  15.       <param-value>/WEB-INF/struts-config.xml</param-value>  
  16.     </init-param>  
  17.     <init-param>  
  18.       <param-name>debug</param-name>  
  19.       <param-value>2</param-value>  
  20.     </init-param>  
  21.     <init-param>  
  22.       <param-name>detail</param-name>  
  23.       <param-value>2</param-value>  
  24.     </init-param>  
  25.     <load-on-startup>2</load-on-startup>  
  26.   </servlet>  
  27.   
  28.   
  29.   <!-- Standard Action Servlet Mapping -->  
  30.   <servlet-mapping>  
  31.     <servlet-name>action</servlet-name>  
  32.     <url-pattern>*.do</url-pattern>  
  33.   </servlet-mapping>  
  34.   
  35.     
  36. </web-app>  


在Struts-config.xml中配置action,actionform等信息:

 

 

  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2.   
  3. <!DOCTYPE struts-config PUBLIC  
  4.           "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  5.           "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
  6.   
  7. <struts-config>  
  8.     <form-beans>  
  9.         <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"></form-bean>  
  10.     </form-beans>  
  11.       
  12.     <action-mappings>  
  13.         <action path="/login"   
  14.                 type="com.bjpowernode.struts.LoginAction"  
  15.                 name="loginForm"  
  16.                 scope="request" >  
  17.             <forward name="success" path="/login_success.jsp"></forward>  
  18.             <!--<forward name="error" path="/login_error.jsp"></forward>-->  
  19.             <forward name="error" path="/login.jsp"></forward>  
  20.         </action>  
  21.         <action path="/changelang"  
  22.                 type="com.bjpowernode.struts.ChangeLanguageAction"  
  23.                 >  
  24.             <forward name="login" path="/login.jsp" redirect="true"></forward>  
  25.         </action>  
  26.     </action-mappings>  
  27.       
  28.       
  29.     <message-resources parameter="resource.MessageBundle"></message-resources>  
  30. </struts-config>  


      到此实例结束。点击这里查看效果。也可以下载源码。最后来2张效果图吧。

 

 

 

   

 

 

 

6
6
分享到:
评论

相关推荐

    Maven下建立的spring+struts2+jstl实例

    Maven下建立的spring+struts2+jstl实例

    spring+struts+hibernate+dwr+jstl_example.rar_JSTL example_dwr_dw

    spring+struts+hibernate+dwr+jstl做的实例.rar

    运用JSP+Struts+JSTL技术的MVC架构项目实例源码.rar

    运用JSP+Struts+JSTL技术的MVC架构,附带项目安装步骤。

    JSP+Struts+JSTL+EL学习实例

    风格及功能上参照动易网站管理系统(http://www.asp163.net),源码上有注释,方便参考使用,谢谢

    spring+struts+hibernate+dwr+jstl做的实例

    以用户管理为例,结合spring struts hibernate dwr jstl做的实例,struts hibernate dwr 与Spring完全结合,实现用户列表、信息增、删、改、查、维护时用户重名提示等功能,还包括页面自动转码设置(web.xml),...

    struts+hibernate+spring社区新闻实例

    struts1.x+hibernate3.x+spring2.x社区新闻实例,发布到服务器上便可使用的新闻网站,数据库文件在src下sqsys.sql,使用的是mysql数据,使用JSTL标签,struts1.x的TILES标签, 加入以上所需的包既可运行

    j2ee中struts+hibernate+spring+pager-taglib分页实例

    j2ee中struts+hibernate+spring+pager-taglib分页实例 这套解决方案,是按照MVC的模式来做的,基于STRUTS框架。分为三个部分,表现层用的是JSP,其中用了JSTL和pager taglib做分页;控制层就是用的很传统的Action;...

    struts1.2.9+hibernate3.3.1完整数据库表增删改查示例

    struts1.2.9,Hibernate3.3.1,struts-tags,JSTL标签库+EL,对数据库表(test.userinfo)增删改查的完整示例. 未用Eclipse或MyEclipse,几乎纯手工实现,含所需库文件. 欢迎大家下载部署,学习. 2009-12-15

    struts-hibernate-nested-demo.rar_DEMO_JSTL de_java 主从表_从表

    本实例为struts+jstl+Hibernate3;主要是学习Hibernate多表处理。主从表的处理学习之用

    struts+hibernate的jsp分页实例

    本人用struts+hibernate写的分页,有详细的注解,方便新手学习,在jsp中实现首页下一页上一页末页功能.index.jsp控制showlist.jsp页面中每页显示的信息条数,本实例在xp+tomcat5.5验证通过.数据库使用的sql2000中的pubs...

    完整数据库表增删改查示例(struts1.2,JSTL,MySQL5136,JDBC,tomcat5028)

    MySQL5.1.36,tomcat5.0.28 利用struts1.2,JSTL标签库,通过JDBC连接池实现对数据库表(test.userinfo)增删改查的完整示例. 未用Eclipse或MyEclipse,几乎纯手工实现,含所需库文件. 欢迎大家下载部署,学习. 2009-12-15

    Spring MVC tutorial

    spring+struts+hibernate+dwr+jstl做的实例 博文链接:https://eric2007.iteye.com/blog/207158

    Struts 2.1.8_学习源码

    Struts2_03Taglib : Struts2常用标签的使用方法 Struts2默认支持OGNL、JSTL、Groovy和Velcity表达式 Struts2_04ActionResultType : Struts2关于Action跳转类型的应用 对各种不同的跳转类型使用的实例 Struts2_05...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...

    struts1.2,spring2,hibernate3整合实例代码

    代码清晰,分层清楚,jstl页面多层循环,BaseAction整合业务层。myeclipse开发,包含包图片,没有具体包。注意解决包冲突。

    Java Web开发实例大全 基础卷

    XML简介,Tomcat服务器的安装及配置,JSP基础语法,JSP内置对象,JavaBean,文件上传,Servlet程序开发,表达式语言,Tomcat数据源,JSP标签编程,JSP标准标签库(JSTL),Ajax开发技术,Struts基础开发,Struts常用...

    struts2配置详解

    从 Struts1 升级到 Struts2: 1、Struts1 里使用 ActionServlet 作为控制器; Struts2 使用了一个过滤器作为控制器 2、Struts1 中每个 ...5、Struts2 在页面里使用 OGNL 来显示各种对象模型, 可以不再使用 EL 和 JSTL

Global site tag (gtag.js) - Google Analytics