Java
我正在我所有的会话类上实现Serializable,这样我就可以使用负载平衡器进行一些服务器场集群 我已经控制了集群,它工作得很好。然而,我得到了一个错误,似乎我无法解决 每当我在index.jsp上输入时,我都会收到以下错误:Java ,java,jsp,jsf,jakarta-ee,icefaces-1.8,Java,Jsp,Jsf,Jakarta Ee,Icefaces 1.8,我正在我所有的会话类上实现Serializable,这样我就可以使用负载平衡器进行一些服务器场集群 我已经控制了集群,它工作得很好。然而,我得到了一个错误,似乎我无法解决 每当我在index.jsp上输入时,我都会收到以下错误: Mensaje: javax.servlet.ServletException: java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: /WEB-INF/inc-conte
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
有什么问题吗?实际上,loadBundle组件是从JSF2.0中临时生成的 因为您也没有使用IceFaces2.0。你也不能利用这个。 所以我能想到的唯一方法就是创建自己的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>
实际上,loadBundle组件是从JSF2.0中临时生成的 因为您也没有使用IceFaces2.0。你也不能利用这个。 所以我能想到的唯一方法就是创建自己的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>
我们为应用程序中的每种语言加载一个MessageBundle。那么,如何加载messageBundleSinProp?这个包在运行时会被需要加载的包所替换。@Antonio您是如何通过系统属性指定要加载的包的?它确实是IdomaBean类的一个getter,基本上是这样做的:getMessageBundle.substring0,getMessageBundle.indexOf。。MessageBundle是在登录时选择的,具体取决于某些参数,如国家代码或浏览器标题。我们为应用程序上的每种语言加载MessageBundle。那么,如何加载messageBundleSinProp?这个包在运行时会被需要加载的包所替换。@Antonio您是如何通过系统属性指定要加载的包的?它确实是IdomaBean类的一个getter,基本上是这样做的:getMessageBundle.substring0,getMessageBundle.indexOf。。MessageBundle是在登录时选择的,具体取决于某些参数,如国家代码或浏览器标题。