dom*_*nik 11 java spring spring-mvc thymeleaf
我有一个<textarea name="desc" />
可能包含换行符的field(),我想用它们的HTML替换它们:<br />
.我怎样才能做到这一点?我正在使用Thymeleaf 2.1.4.RELEASE.
hol*_*s83 12
正如dominik所述,\n
对于换行不起作用.但是,你可以使用
.
${#strings.replace(desc,' ','<br>')}
Run Code Online (Sandbox Code Playgroud)
或者通过转义来防止代码注入:
${#strings.replace(#strings.escapeXml(desc),' ','<br>')}
Run Code Online (Sandbox Code Playgroud)
与在JSP中一样,不可能使用简单直接的方法
${#strings.replace(desc, '\n', '<br />')}
Run Code Online (Sandbox Code Playgroud)
至少有两个问题:
<
和>
内部表达式,因此抛出异常我找到的第一个问题的解决方案是在控制器中设置换行符并将其传递给视图.
为了解决您需要使用第二个问题<
,而不是<
和>
代替>
.还记得这意味着使用th:utext
而不是th:text
// in controller:
model.addAttribute("newLineChar", '\n');
// in view
${#strings.replace(desc, newLineChar, '<br />')}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Thymeleaf + Spring(这意味着Thymeleaf将使用SpEL而不是OGNL),您也可以使用SpEL T operator
.这样您就不必在控制器中声明换行变量,但在这种情况下请注意换行符分隔符会因应用程序运行的操作系统而异:
${#strings.replace(desc, T(System).getProperty('line.separator'), '<br />')}
Run Code Online (Sandbox Code Playgroud)
我最终将使用的是上述+ Apache StringUtils的组合,它定义了public static final String LF = "\n";
:
${#strings.replace(desc, T(org.apache.commons.lang3.StringUtils).LF, '<br />')}
Run Code Online (Sandbox Code Playgroud)