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

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

 

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

 

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

 

[java]  view plain copy print ?
 
  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个异常:用户名未找到,密码错误。

 

[java]  view plain copy print ?
 
  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. }  


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

 

 

[java]  view plain copy print ?
 
  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的处理:

 

 

[java]  view plain copy print ?
 
  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. }  



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

 

 

[java]  view plain copy print ?
 
  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个语言包。具体内容如下:

 

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

 

[java]  view plain copy print ?
 
  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!  

中文语言包:

[java]  view plain copy print ?
 
  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源码也贴出来:

 

 

[html]  view plain copy print ?
 
  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:

 

 

[html]  view plain copy print ?
 
  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:

 

 

[html]  view plain copy print ?
 
  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等信息:

 

 

[html]  view plain copy print ?
 
  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张效果图吧。

 

 

 

   

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值