我使用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
行为吗?我试图找到有关此功能的信息但未成功。我需要文档或任何其他证明它应该以这种方式工作的证据。
答案 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
,因此他保留了所有内容。
如果您在控制台上打印它,它将与您从客户端发送的序列相同。