在Liferay首选项中存储包含双引号的字符串

时间:2014-08-27 14:46:47

标签: java liferay portlet

我在Liferay 6.1配置页面中存储首选项,如下所示,没有任何问题

prefs.setValue(prefName, request.getParameter(prefName));
prefs.store();

然后我可以像这样检索它们

prefs.getValue(prefName, StringPool.BLANK);

当存储的字符串不包含双引号但在引号被“截断”后它执行字符串的一部分时,这工作正常。 我认为它是一些url编码/解码问题,我不知道如何解决它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

适合我。您是否碰巧在输入字段中使用首选项?在这种情况下,你显然必须逃避偏好。想象一下这种情况:让您的偏好值为test"test。现在在输入字段中使用它们,如下所示:

<input type="text" value="<%=prefs%>"/>

这将导致像这样的非法HTML

<input type="text value="test"test"/>

浏览器自然只会将测试显示为值 - 因为属性会以结果报价终止。幸运的是Liferay有com.liferay.portal.kernel.util.HtmlUtil你可以使用,例如试试

<input type="text" value="<%=HtmlUtil.escapeAttribute(prefs)%>"/>

这将生成如下HTML:

<input type="text" value="test&#x22;test"/>

可以很好地解析并给出预期的结果。当你了解它时,请检查你在HtmlUtil中找到的其他转义方法。

如果这不能解决您的问题,请提供您正在使用的版本号。