2

我正在我的所有会话类上实现 Serializable,因此我可以使用负载均衡器进行一些农场集群。

我已经控制了集群并且它工作正常。但是,我遇到了一个似乎我无法解决的错误。

每当我在 index.jsp 上输入时,都会收到此错误:

Mensaje: javax.servlet.ServletException: java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: /WEB-INF/inc-content/content.jspx @5,73 <f:loadBundle basename="#{idioma.messageBundleSinProp}"> /WEB-INF/inc-content/content.jspx @5,73 basename="#{idioma.messageBundleSinProp}" setAttribute: Atributo no serializable 
Tipo Error: class javax.servlet.ServletException 
Excepcion: javax.servlet.ServletException: java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: /WEB-INF/inc-content/content.jspx @5,73 <f:loadBundle basename="#{idioma.messageBundleSinProp}"> /WEB-INF/inc-content/content.jspx @5,73 basename="#{idioma.messageBundleSinProp}" setAttribute: Atributo no serializable 
Codigo de Estado: 500 
Nombre Servlet: jsp 

尽管是西班牙语,但它基本上说该属性不可序列化。似乎我错过了一些东西,因为它idioma.messageBundleSinProp是一个吸气剂,而不是一个二传手:

public String getMessageBundle()
{
    if(idiomaSeleccionado!=null)
        return(webUtil.getPropertiesValue(idiomaSeleccionado, "LanguageChances.properties"));
    else
        return(webUtil.getPropertiesValue(idiomaSeleccionadoDefecto, "LanguageChances.properties"));
}

public String getMessageBundleSinProp()
{
    //String propertieSeleccionado=getMessageBundle();
    return(getMessageBundle().substring(0,getMessageBundle().indexOf(".")));
}

有什么问题?


您可以尝试将gwt-java-math项目添加为依赖项。正如他们的维基上所说,

该库正在合并到 GWT 中!目前它在 GWT 主干上。

它可能在即将发布的 v2.5 中可用。

4

1 回答 1

4

实际上 loadBundle 组件是从 JSF 2.0 开始的。

源代码 JSF 1.2

源代码 JSF 2.0

由于您也没有使用 Icefaces 2.0。你也不能利用这个。 冰面JIRA

所以我能想到的唯一方法是创建自己的 messageBean 并检索消息。

你可以这样做:

public class MessageBean implements Serializable
{

   transient private static ResourceBundle bundle;
   transient private static Map map;

protected static ClassLoader getCurrentClassLoader(Object defaultObject)
{
  ClassLoader loader = Thread.currentThread().getContextClassLoader();
  if (loader == null)
  {
     loader = defaultObject.getClass().getClassLoader();
  }
  return loader;
}

MessageBean()
{
  bundle = ResourceBundle.getBundle("LanguageChances", java.util.Locale.getDefault(), getCurrentClassLoader(null));
  map = new HashMap<String, Object>();
  Enumeration<String> keys = bundle.getKeys();
  while (keys.hasMoreElements()) {
      String key = keys.nextElement();
      Object value = bundle.getObject(key);
     map.put(key, value);
  }
}

public Map getMap(){
  return map;
}
}

并在您的页面上使用类似的内容来检索消息:

<c:forEach items="#{messageBean.map}" var="entry">
  <h:outputText value="#{entry.key}"/>
</c:forEach>
于 2012-07-02T17:23:55.047 回答