(五)struts之国际化

这里的国际化其实跟第五篇文章第一篇文章要实现的效果一样,也是登录验证信息,只不过是国际化处理而已,多了几个国际化的配置文件

这里我要说下,可能第一篇文章和第五篇文章看完后,好多人都还有疑问

关于第一篇文章的疑问就是,为什么msg.properties这个配置文件会为登录页面服务,并且会显示用户名和密码的错误信息

首先呢我们看,由于资源文件和验证规则文件都在struts-config.xml中配置了,虽然msg.properties并没有出现跟登录页面对应的loginname和pwd,但是我们看到了validator.xml中出现了这两个属性,并且将两个属性对应出错的信息关联到msg.properties中去,因此呢,登录页面就通过validator.xml与msg.properties关联起来了,至于为什么会显示错误信息呢

我不得不提上篇文章中介绍到的html:message标签了,这个标签的作用就是

 在页面中取出消息:

      错误消息:<html:errors>, <html:messages id="msg">...

     提示消息:<html:messages id="msg" message="true">

这里的id="msg"这是种规定写法,不能改成别的了,所以如果取的是错误消息的话,messge=true就不用设置了,如第一篇文章中

<html:messages id="msg">

   <li><bean:write name="msg"/></li>

   </html:messages>

这个就用来显示配置文件中关于错误的信息

,如第五篇文章的话,因为在LoginForm中配置有

if(this.loginname == null || "".equals(this.loginname)){

ActionMessage msg = new ActionMessage("用户名不能为空",false);

errors.add(ActionErrors.GLOBAL_MESSAGE, msg);

}

if(this.pwd == null || "".equals(this.pwd)){

ActionMessage msg = new ActionMessage("密码不能为空",false);

errors.add(ActionErrors.GLOBAL_MESSAGE, msg);

}

这段代码起了作用,就在页面上匹配的显示出来了,其实我上面说的关于第五篇文章的疑问其实不用疑问,因为他是将验证放在LoginForm中,而LoginForm正好是用来接收登录页面信息的,所以自然就匹配验证上了



关于这一篇要讲的国际化,其实也是跟第一篇文章差不多,就多几个资源配置文件,不过不用配置验证文件,而是将页面的文本域属性名称值直接配置到资源文件中,而不像第一篇那样通过validator.xml与资源文件联系起来了

login.jsp

Html代码   收藏代码
  1. <span style="font-size: large;"><%@ page pageEncoding="UTF-8"%>  
  2. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>  
  3. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>  
  4. <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>  
  5. <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <title><bean:message key="title"/></title>  
  10.   </head>  
  11.     
  12.   <body>  
  13.     <h3><bean:message key="title"/></h3><hr/>  
  14.     <ul>  
  15.     <html:messages id="msg">  
  16.         <li style="color:red"><bean:write name="msg"/></li>  
  17.     </html:messages>  
  18.     </ul>  
  19.     <form action="login.do" method="post">  
  20.              用户:<input type="text" name="loginname" value="${param.loginname}"><br/>  
  21.         密码:<input type="text" name="pwd"  value="${param.pwd }"><br/>  
  22.         <input type="submit" value="提交">  
  23.     </form>  
  24.      
  25.       
  26.   </body>  
  27. </html></span>  
 

 关于表单元素完全也可以通过HTML标签表示,效果是一样的

Html代码   收藏代码
  1. <span style="font-size: large;"> <html:form action="login.do" method="post">  
  2.         <bean:message key="loginname"/><html:text property="loginname"/>&nbsp;<br/>  
  3.         <bean:message key="pwd"/><html:password property="pwd" redisplay="false" />&nbsp;<br/>  
  4.         <html:submit><bean:message key="button.submit"/></html:submit>  
  5.     </html:form></span>  

看到上面的html:messgaes没有,由于没有配置属性message=true,所以显示的是错误信息,关于错误信息在LoginForm中都已经通过ActionErrors写好了 


 LoginForm.java

Java代码   收藏代码
  1. <span style="font-size: large;">package com.javacrazyer.web.formbean;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4.   
  5. import org.apache.struts.action.ActionErrors;  
  6. import org.apache.struts.action.ActionForm;  
  7. import org.apache.struts.action.ActionMapping;  
  8. import org.apache.struts.action.ActionMessage;  
  9.   
  10. /** 
  11.  * 用来收集客户端提交数据. 
  12.  * 要收集数据的属性的名一定要跟请求参数名相同 
  13.  *  
  14.  */  
  15. public class LoginForm extends ActionForm {  
  16.       
  17.     public ActionErrors validate(ActionMapping mapping,  
  18.             HttpServletRequest request) {  
  19.         ActionErrors errors = new ActionErrors();  
  20.           
  21.         if(this.loginname == null || "".equals(this.loginname)){  
  22.             ActionMessage msg = new ActionMessage("loginname.error");  
  23.             errors.add("loginname", msg);  
  24.         }  
  25.           
  26.         if(this.pwd == null || "".equals(this.pwd)){  
  27.             ActionMessage msg = new ActionMessage("pwd.error");  
  28.             errors.add("pwd", msg);  
  29.         }  
  30.           
  31.         return errors;  
  32.     }  
  33.   
  34.     private static final long serialVersionUID = 6619272689058619128L;  
  35.   
  36.     private String loginname;  
  37.       
  38.     private String pwd;  
  39.   
  40.     public String getLoginname() {  
  41.         return loginname;  
  42.     }  
  43.   
  44.     public void setLoginname(String loginname) {  
  45.         this.loginname = loginname;  
  46.     }  
  47.   
  48.     public String getPwd() {  
  49.         return pwd;  
  50.     }  
  51.   
  52.     public void setPwd(String pwd) {  
  53.         this.pwd = pwd;  
  54.     }  
  55. }  
  56. </span>  
 

msg.properties

Xml代码   收藏代码
  1. <span style="font-size: large;">title=Java\u56FD\u9645\u5316\u652F\u6301  
  2. loginname=\u7528\u6237\u540D  
  3. pwd=\u5BC6\u7801  
  4.   
  5.   
  6. button.submit=\u63D0\u4EA4  
  7. button.reset=\u91CD\u7F6E  
  8.   
  9. welcome= \u6B22\u8FCE\: {0}, \u5F53\u524D\u65F6\u95F4\: {1}  
  10.   
  11. loginname.error=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A  
  12. pwd.error=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A</span>  

 msg_en_US.properties

Xml代码   收藏代码
  1. <span style="font-size: large;">title=Java I18N  
  2. loginname=LoginName  
  3. pwd=Password  
  4.   
  5. button.submit=Submit  
  6. button.reset=Reset  
  7.   
  8. welcomeWelcome: {0}, currDate: {1}  
  9.   
  10. loginname.errorLoginName Can not be Null!  
  11. pwd.error=Password Can not be Null\!</span>  

 msg_zh_CN.properties

Xml代码   收藏代码
  1. <span style="font-size: large;">title=Java\u56FD\u9645\u5316\u652F\u6301  
  2. loginname=\u7528\u6237\u540D  
  3. pwd=\u5BC6\u7801  
  4.   
  5.   
  6. button.submit=\u63D0\u4EA4  
  7. button.reset=\u91CD\u7F6E  
  8.   
  9. welcome= \u6B22\u8FCE\: {0}, \u5F53\u524D\u65F6\u95F4\: {1}  
  10.   
  11. loginname.error=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A  
  12. pwd.error=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A</span>  
 



 LoginAction.java

Java代码   收藏代码
  1. <span style="font-size: large;">package com.javacrazyer.web.action;  
  2.   
  3. import java.util.Date;  
  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. import org.apache.struts.action.ActionMessage;  
  13. import org.apache.struts.action.ActionMessages;  
  14.   
  15. import com.javacrazyer.service.UserService;  
  16. import com.javacrazyer.web.formbean.LoginForm;  
  17.   
  18. /** 
  19.  * 业务控制器:控制业务处理的流程 
  20.  * 
  21.  */  
  22. public class LoginAction extends Action {  
  23.   
  24.     //具体业务流程处理方法,由Struts框架回调  
  25.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  26.             HttpServletRequest request, HttpServletResponse response)  
  27.             throws Exception {  
  28.         //取数据  
  29.         LoginForm loginForm = (LoginForm)form;  
  30.         String loginname = loginForm.getLoginname();  
  31.         String pwd = loginForm.getPwd();  
  32.           
  33.         //调用业务逻辑  
  34.         UserService service = new UserService();  
  35.         boolean flag = service.validate(loginname, pwd);  
  36.           
  37.         //跳转  
  38.         if(flag){  
  39.             //成功  
  40.               
  41.             //创建一个普通消息  
  42.             ActionMessage msg = new ActionMessage("welcome"new Object[]{loginname, new Date()});  
  43.             //添加到消息容器中  
  44.             ActionMessages msgs = new ActionMessages();  
  45.             msgs.add("succ", msg);  
  46.               
  47.             //保存到请求属性域内  
  48.             this.saveMessages(request, msgs);  
  49.               
  50.             return mapping.findForward("succ");  
  51.         }else{  
  52.             //失败  
  53.             request.setAttribute("errorMsg""你输入的用户名或密码有误,请返回,重新登录!!!");  
  54.             return mapping.findForward("failure");  
  55.         }  
  56.     }  
  57.       
  58. }</span>  

 WEB-INF/struts-config.xml

Xml代码   收藏代码
  1. <span style="font-size: large;"><?xml version="1.0" encoding="UTF-8" ?>  
  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.   
  9. <!-- ================================================ Form Bean Definitions -->  
  10.     <form-beans>  
  11.         <form-bean name="loginForm" type="com.javacrazyer.web.formbean.LoginForm"></form-bean>  
  12.     </form-beans>  
  13.   
  14. <!-- =========================================== Action Mapping Definitions -->  
  15.     <action-mappings>  
  16.         <action path="/login"   
  17.                 name="loginForm"   
  18.                 type="com.javacrazyer.web.action.LoginAction"  
  19.                 input="/login.jsp">  
  20.             <forward name="succ" path="/succ.jsp"/>  
  21.             <forward name="fail" path="/failure.jsp"/>  
  22.         </action>  
  23.     </action-mappings>  
  24.       
  25.     <message-resources parameter="msgs"/>  
  26. </struts-config></span>  

 succ.jsp

Html代码   收藏代码
  1. <span style="font-size: large;"><%@ page pageEncoding="UTF-8"%>  
  2. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>  
  3. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.   <head>  
  7.     <title></title>  
  8.   </head>  
  9.     
  10.   <body>  
  11.      <html:messages id="msg" message="true">  
  12.         <bean:write name="msg"/>  
  13.      </html:messages>  
  14.   </body>  
  15. </html></span>  

看到succ.jsp的messge=true这个属性没有,这就是要显示提示信息,而非错误信息,这些提示信息在LoginAction处理登录成功的代码中ActionMessages已经写好了


 failure.jsp

Java代码   收藏代码
  1. <span style="font-size: large;"><%@ page pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.   <head>  
  5.     <title>登录失败</title>  
  6.   </head>  
  7.     
  8.   <body>  
  9.     <h3>登录失败</h3><hr/>  
  10.     <h2 style="color:red">可能的原因是:${errorMsg}</h2>   
  11.   </body>  
  12. </html>  
  13. </span>  
 

好了,最后回顾下struts的国际化操作要点吧

1. 提供资源文件:msgs.properties,msgs_zh_CN.properties,....

2. 在struts配置文件中用<message-resources parameter=“资源文件的基本名”>元素来声明资源文件基本名

3. 页面中:

   1)显示文件信息需要使用:<bean:message key="..."/>

   2) 程序中怎么产生国际化的提示消息和错误消息:

      ActionMessage msg = new AcctionMessage("key", Object[] );

      如果是错误信息

      ActionErrors errors = new ActionErrors();

      errprs.add("loginname",msg);

      如果是提示信息

  ActionMessages msgs = new ActionMessages();

 msgs.add("succ", msg);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值