繁体   English   中英

Liferay自定义Portlet中的最大language.properties文件大小

[英]Maximum language.properties file size in liferay custom portlets

当我尝试添加包含数千个带有长文本值的键的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

Liferay Portal本身在平台的文件中带有〜7400行,它们可以正常工作。 您遇到问题的大小顺序是多少? 我不知道任何与大小相关的限制,只是将其保留在内存中。

不过,您应该注意编码,并确保文件是UTF-8编码的。

另一种检查您是否真正受大小影响而不是受引起异常的特定值(是否检查了日志文件?)的方法是:

  • 您说使用“较小”的文件,一切正常。 我们将此内容命名为A
  • 您还说过,当您向文件中添加几千行(我们称其为B)时,A + B的结果不起作用
  • 如果只尝试使用B,该怎么办:如果该文件中包含令人反感的内容,编码等,那么您会发现这种方式。

此外,考虑到整个门户网站(已经是一个令人印象深刻的规模)与〜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"/>与加载之间做出决定。资源自己打包。 两者都不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM