WEB开发网
开发学院软件开发Java 通过 HTTP 加载 Java 资源包 阅读

通过 HTTP 加载 Java 资源包

 2009-12-24 00:00:00 来源:WEB开发网   
核心提示: JSP 在 MessagesBean 实例中设置几个属性,然后遍历 MessagesBean 创建的 messagesMap,通过 HTTP 加载 Java 资源包(8),并显示格式化的消息(清单 4),清单 4. MessagesBean.javapublicMap<String,Str

JSP 在 MessagesBean 实例中设置几个属性,然后遍历 MessagesBean 创建的 messagesMap,并显示格式化的消息(清单 4)。


清单 4. MessagesBean.java
public Map<String,String> getMessagesMap(){ 
    messages = new HashMap<String, Object[]>(); 
    // The message keys and the arguments are stored in 
    // a HashMap for the purposes of this sample. 
 
    // In the real world, both the message keys and their arguments could be 
    // persisted to a database by event emitters living in many different 
    // Web Applications which could be deployed on different hosts. 
    // A single, centralized display widget, living on any server anywhere, 
    // could retrieve the message keys and their arguments from the database, 
    // get the messages from the appropriate Web Application resource bundles, 
    // and then format and display the messages. 
    messages.put("autoparts.parts.received", 
      new Object[]{"Detroit"}); 
    messages.put("autoparts.parts.shipped", 
      new Object[]{"Cleveland"}); 
    messages.put("autosales.invoice.received", 
      new Object[]{"TopNotch Motors", 10}); 
    messages.put("autosales.shipment.received", 
      new Object[]{"TopNotch Motors", "Lamborghini"}); 
 
    Set<String> messagesKeys = messages.keySet(); 
    Iterator<String> messagesIter = messagesKeys.iterator(); 
    messagesMap = new HashMap<String,String>(); 
    while(messagesIter.hasNext()) { 
      String key = messagesIter.next(); 
      Object[] values = messages.get(key); 
      int dotIndex = key.indexOf('.'); 
      if (dotIndex>1) { 
        String productName= key.substring(0, dotIndex); 
        String msg = getString(key,productName, this.locale ); 
        String formattedParams = MessageFormat.format(msg, values); 
 
        messagesMap.put(key, formattedParams); 
      } 
    } 
    return messagesMap; 
  } 
 
  /** 
   * Returns the string in a resource bundle for key, product and locale 
   * 
   * @param messageKey a key 
   * @param product the identifier for a specific resource bundle 
   * @param locale the locale of the client 
   * @return String a value which is assigned to the key 
   */ 
  public String getString(String messageKey, String product, String locale) { 
    try { 
      // Load bundle using RemoteResourceBundleLoader. 
      ResourceBundle bundle = ResourceBundle.getBundle( 
          BASE_BUNDLE_PACKAGE+"."+product, 
          new Locale(locale), 
          new RemoteResourceBundleLoader(this.scheme, this.host, 
            this.port, this.refererHeader)); 
      String messageString=bundle.getString(messageKey); 
      return messageString; 
    } catch (MissingResourceException e) { 
      return null; 
    } 
}

当 JSP 访问 bean 的 messagesMap 属性时,bean 为每个硬编码消息键调用 getString()。

在 JDK 6 中,ResourceBundle.getBundle() 方法把 ResourceBundle.Control 类作为一个参数。在清单 4 的 getString() 方法中,您把类 RemoteResourceBundleLoader 的一个新实例作为 ResourceBundle.getBundle() 的第三个参数进行传递。RemoteResourceBundleLoader 扩展 ResourceBundle.Control。对 ResourceBundle.getBundle() 的调用返回了一个资源包。通过调用 bundle.getString(messageKey),这个资源包被用来获取消息键的消息。

在您获得消息后,使用 MessageFormat.format() 格式化消息,然后把格式化的消息放到由 JSP 使用的 messagesMap 中。

结束语

本文向你演示了如何通过 HTTP 加载 Java 资源包。在真实的情景中,消息键和它们的参数都会被许多不同的 Web 应用程序(可能部署在不同的主机中)中的事件发送器持久化到数据库中。一个单一、集中化的显示小部件(位于任何地方的任何服务器)能够从数据库中检索消息键和它们的参数,从适当的 Web 应用程序资源包中获取消息,然后格式化消息并进行显示。

本文示例源代码或素材下载

上一页  3 4 5 6 7 8 

Tags:通过 HTTP 加载

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接