jsp:setProperty是否会转义esc-sequences?

时间:2013-10-29 14:47:59

标签: java jsp

我使用jsp:setProperty用用户数据填充bean字段。我的JSP页面如下:

<%-- skipped code --%>
<jsp:setProperty name="myBean" property="*"/>
<%-- skipped code --%>
<input type="text" name="myField" value=""></td> 
<%-- skipped code --%>

当我在包含esc-sequences(例如\r\n)的文本字段值中指定然后尝试在我的bean中调试setMyField(String s) setter时,s似乎带有转义字符(例如\\r\\n)。

这是常见的jsp:setProperty行为吗?我试图找到有关此功能的信息但未成功。我需要文档或任何其他证明它应该以这种方式工作的证据。

3 个答案:

答案 0 :(得分:0)

当您说s似乎带有转义字符(例如\\r\\n)时,这就是调试程序的行为。实际上有四个字符:'\\', 'r', '\\', 'n'

如果您通过System.out.println(myBean.getMyField())打印出来,则应在控制台中看到\r\n

执行myBean.setMyField("\n")时,实际上只有一个角色:'\n'

答案 1 :(得分:0)

我怀疑输入字段正在被清理(通过应用程序中的其他内容)。

作为一般规则转义序列

\r
\n

当他们通过输入字段进入时需要进行转义(出于安全原因)。这意味着在服务器处理输入之前,为这些序列添加一个额外的反斜杠。

我建议在“提交”之前用

之类的内容替换序列
<br>

抱歉,我无法向您提供官方文档,说明jsp标记没有这样做。

答案 2 :(得分:0)

我部分同意@Changgeng。

您看到的行为是调试器本身,所以不要担心。我认为它会尝试保留您发送的所有字符,并且您必须知道完整的值,因此它会在序列中为每个\添加一个\

它不希望您与'\n'混淆new line,因此他保留了所有内容。

如果您在控制台上打印它,它将与您从客户端发送的序列相同。