时间:2012-06-29 08:36:07

标签: java jsp jsf java-ee icefaces-1.8

我正在所有会话类上实现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(".")));
}

可能出现什么问题?

1 个答案:

答案 0 :(得分:4)

实际上,loadBundle组件是从JSF 2.0中变为瞬态的。

Source Code JSF 1.2

Source Code JSF 2.0

因为你也没有使用Icefaces 2.0。你也不能利用它。 ICEFACES 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>