我使用jsp:setProperty
用用户数据填充bean字段。我的JSP
页面如下所示:
<%-- skipped code --%>
<jsp:setProperty name="myBean" property="*"/>
<%-- skipped code --%>
<input type="text" name="myField" value=""></td>
<%-- skipped code --%>
当我在文本字段中指定包含 esc 序列的值时(例如 rn
),然后尝试在我的 bean 中调试setMyField(String s)
setter,s
似乎带有转义字符(例如 \r\n
)。
这是常见的jsp:setProperty
行为吗?我试图查找有关此功能的信息,但没有成功。我需要文档或任何其他证明它应该以这种方式工作的证据。
当您说s
似乎带有转义字符时(例如 \r\n
),这是调试器的行为。实际上有四个字符:'\', 'r', '\', 'n'
。
如果通过 System.out.println(myBean.getMyField())
打印出来,您应该会在控制台中看到rn
。
当你做myBean.setMyField("n")
时,实际上只有一个字符:'n'
。
我怀疑输入字段正在被清理(通过应用程序中的其他内容)。
作为一般规则,转义序列
r
n
当它们通过输入字段进入时需要转义(出于安全原因)。这意味着在服务器处理输入之前,向这些序列添加额外的反斜杠。
我建议用类似的东西替换"提交"之前的序列
<br>
抱歉,我无法为您提供说明 jsp 标签没有这样做的官方文档。
我部分同意@Changgeng。
您看到的行为是调试器本身,因此不用担心。我认为它试图保留您发送的所有字符,您必须知道完整的值,因此它会在序列中的每个附加一个
。
它不希望你'n'
与new line
混淆,所以他保留了一切。
如果在控制台上打印它,它将与您从客户端发送的序列相同。