有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

然后我就可以这样取回它们

prefs.getValue(prefName, StringPool.BLANK);

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


共 (1) 个答案

  1. # 1 楼答案

    对我有用。您是否碰巧在输入字段中使用了首选项?在这种情况下,你显然必须避开偏好。想象一下这个场景:让您的首选项的值为test"test。现在在如下输入字段中使用它们:

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

    这将导致像这样的非法HTML

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

    浏览器自然只会将test显示为value,因为属性以结果引号终止。幸运的是,Liferay有com.liferay.portal.kernel.util.HtmlUtil可供您使用,例如尝试

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

    这将生成如下HTML:

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

    这是很好的分析,并给出了预期的结果。当你这么做的时候,检查你在HtmlTil中找到的其他转义方法

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