我正在所有会话类上实现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(".")));
}
可能出现什么问题?
答案 0 :(得分:4)
实际上,loadBundle组件是从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>