我正在所有 session 类上实现可序列化,这样我就可以使用负载均衡器进行一些农场集群。
我已经控制了集群并且工作正常。但是,我遇到了一个似乎无法解决的错误。
每当我输入 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 是 getter,而不是 setter:
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(".")));
}
可能出了什么问题?
最佳答案
实际上,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>
关于java - <f :loadBundle basename Non-serializable attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11258541/