当我尝试添加带有数千个具有longtext值的键的Language.properties文件时。
无法使用<liferay-ui:message key="xyz" />
检索jsp文件中的值。它没有显示任何值并在其输出中显示关键字。
我可以知道它支持的最大键数或最大文件大小。
我正在使用Liferay 6.0.6与Tomcat捆绑。
在我的属性文件中,它包含7600行,键值很大。
InputStream stream = application.getResourceAsStream("/abc.properties");
Properties prop=new Properties();
prop.load(stream);
如果我使用上面的代码从另一个属性文件中检索数据,则会出现以下错误。
08:14:08,936 ERROR [jsp:154] java.lang.IllegalArgumentException: Malformed \uxxxx encoding.
at java.util.Properties.loadConvert(Properties.java:569)
at java.util.Properties.load0(Properties.java:392)
at java.util.Properties.load(Properties.java:342)
at org.apache.jsp.html.ahadith.sb_005fview11_jsp._jspService(sb_005fview11_jsp.java:158)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at com.liferay.portlet.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:316)
at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:105)
at com.liferay.util.bridges.mvc.MVCPortlet.include(MVCPortlet.java:328)
at com.liferay.util.bridges.mvc.MVCPortlet.include(MVCPortlet.java:343)
at com.liferay.util.bridges.mvc.MVCPortlet.doDispatch(MVCPortlet.java:291)
先谢谢, Shahbaz Khan
答案 0 :(得分:3)
您应该注意编码,并确保您的文件是UTF-8编码。
另一种检查你是否真的受到大小影响的方法而不是导致异常的特定值(你检查了你的日志文件吗?)是:
另外,谈到成千上万的语言键,这听起来像一个安静的令人印象深刻的很多,考虑到整个门户(已经令人印象深刻的大小)与~7400键相处。如果建筑改变是有序的,那几乎值得质疑 - 但这只是一种直觉,你会比我更了解你的应用,你可以判断你需要什么样的翻译。
修改:现在您已编辑了问题,包括实际的堆栈跟踪:是的,您遇到了编码问题。使用jdk的native2ascii
程序将ISO-8859-1编码的属性文件转换为UTF-8。然后通过Liferay使用该文件:看起来你正在从jsp中读取这个文件 - 这意味着你很可能会在每个页面请求中这样做,这是一种简单的方法来杀死你的门户网站的性能。
请注意,Liferay将属性文件读取为UTF-8,而Properties.load(Stream)
始终采用ISO-8859-1,因此您必须自己决定使用<liferay-ui:message key="some-key"/>
和加载资源包。两者都行不通。