基于Java动态生成UTF-8编码的XPages .properties资源文件
我之前处理XPages资源文件时也碰到过一模一样的问题,针对你遇到的Base64字节流包含无效数据或过大,无法存储在单个笔记项中这个错误,分享几个经过验证的解决思路:
拆分大Key-Value对:把单个超长的value拆分成多个小的key,比如将原来的
largeContent: 超长文本内容拆分为largeContent.1: 第一部分内容、largeContent.2: 第二部分内容……在XPages中读取时,再通过代码将这些分段的value拼接起来。这种方法最简单直接,能快速规避单个笔记项的大小限制。修改DXL导入逻辑,拆分$Data项:Notes的资源设计元素(比如.properties对应的元素)是把内容存储在
$Data项中的,默认单个$Data项有大小上限。你可以调整生成DXL的LotusScript代码,把大的Base64内容拆分成多个连续的$Data项,示例DXL片段如下:<item name="$Data" sign="true" summary="false"> <text>第一段Base64编码内容</text> </item> <item name="$Data" sign="true" summary="false"> <text>第二段Base64编码内容</text> </item>导入DXL时,Notes会自动将这些同名称的
$Data项内容合并,不会触发单个项过大的报错,同时也能保证内容的完整性。拆分资源文件本身:如果整个.properties文件内容过大,考虑按业务模块拆分成多个独立的.properties文件,然后在XPages的ResourceBundle配置中同时引用这些文件。这样每个文件对应的设计元素内容都保持在合理大小,从根源上避免单个笔记项超限的问题。
另外需要注意的是,拆分Base64内容时要确保拆分点不在Base64编码的中间有效字符段里(比如不要把一个Base64的4字符块拆断),否则会导致解码失败。
内容的提问来源于stack exchange,提问作者Sean Haggerty

