struts国际化小结

来源:互联网 发布:淘宝上架商品没有品牌 编辑:程序博客网 时间:2024/05/01 19:22

在项目中想做国际化的时候,我们的思路应该是

1,先定义国际化的资源包,可以定义多个资源文件。并且此处要按照需求的不同将资源文件包按功能类别分别命名。 如ErrorApplication.properties,MessageAppliction.properties,ThreadApplication.properties等等,资源文件中以键值对的方式来保 存数据,建议KEY的命名符合规范,这样便于在程序当中更好的引用。如 error.username={0} must not be empty! 在值的一方可以定义接收参数的形式。从下标0开始,如{0}{1}{2}表示接受三个参数,这样的好处便于数据的重用,而且有利于防止资源文件的膨胀。

 

 2,在STRUTS-CONFIG.XML中进行资源文件的注册,很多人都知道要在XML文件中注册,但是为什么要注册,它的原理又是什么? 这里用到了JAVA的反射机制,其实在StrutsConfig.java类中提供了很多方法可以得到XML中的各个元素和对各个元素的操作。 java.lang.Object

         org.apache.struts.config.BaseConfig

                org.apache.struts.config.MessageResourcesConfig 会去解析xml并装载资源对象。

 

基本上目前所有的开源框架都很好的运用了反射机制,在JAVATHINK这一书中将的是向下造型。

如我们定义一个类

public abstract class person{

  public abstract void doSomeThing();

  public void driveCar(){doSomeThing();}

}

 

class Petter extends person{

  public void doSomeThing() {

  System.out.println("petter drive a cherry car");

  }

 

  public static void main(String args[]) {

  Person pr = new Petter(); pr.driverCar();

}

 

3,如何获取资源文件中的值 如果是ERROR信息,有前端FORM中和在SERVICE层中抛出的

如在FORM校验中产生的,

ActionErrors erros = new ActionErrors();

//MessageResources resource = ((MessageResources) request.getAttribute(Globals.MESSAGES_KEY));

Locale local = RequestUtils.getUserLocale(request, null);

if("".equals(user.getUsername().trim()))

//erros.add(Globals.ERROR_KEY, new ActionMessage("the user name is empty",false));

//如果此处不指定FALSE,则表示从资源配置文件中去提取错误信息

//erros.add("username", new ActionMessage("error.username",resource.getMessage(local, "prompt.username"))); erros.add("username",

          new ActionMessage("error.username",ResourceBundle.getBundle("joeho.blog.csdn.resource.ApplicationResource",local).getString("prompt.username")));

 

 return erros;

 

如在SERVIE中产生

ActionMessages errors = new ActionMessages();

if(userForm.getUser().getUsername().trim().equals("name")) {

 

//下面的方法可以得到不同语言下的资源文件 //不知道什么原因,MessageResources 的不能使用

//getResources(request).getMessage(getLocale(request),"prompt.username");

 

 errors.add("username",new ActionMessage("error.repeat",ResourceBundle.getBundle("joeho.blog.csdn.resource.ApplicationResource",getLocale(request)).getString("prompt.username")));

 /* request.setAttribute(Globals.ERROR_KEY, errors);*/

 

saveErrors(request, errors); return mapping.getInputForward(); }

 

4,怎么样在页面中展示

原创粉丝点击