如何使用JSP和JSTL替换换行符?

par*_*ath 44 string jsp replace newline jstl

我有一个传递到我的JSP页面的bean对象列表,其中一个是注释字段.此字段可能包含换行符,我想使用JSTL用分号替换它们,以便可以在文本输入中显示该字段.我找到了一个解决方案,但它不是很优雅.我将在下面发布一个可能性.

par*_*ath 54

这是我找到的解决方案.但它看起来并不优雅:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<% pageContext.setAttribute("newLineChar", "\n"); %>

${fn:replace(item.comments, newLineChar, "; ")}
Run Code Online (Sandbox Code Playgroud)

  • 我试图逃避反斜杠,这也没有用.我上面列出的设置pageContext属性的方法仍然是我可以使它工作的唯一方法.虽然正如BalusC所说,你可能会对一些更简单的方法有更好的运气.在这里拥有所有选项可能很好. (2认同)

Bal*_*usC 19

只需使用fn:replace()功能,以取代\n;.

${fn:replace(data, '\n', ';')}
Run Code Online (Sandbox Code Playgroud)

如果你使用Apache的EL实现而不是Oracle的EL参考实现(即当你使用Tomcat,TomEE,JBoss等而不是GlassFish,Payara,WildFly,WebSphere等)时,你需要重新逃脱反斜杠.

${fn:replace(data, '\\n', ';')}
Run Code Online (Sandbox Code Playgroud)


and*_*ndy 14

这类似于接受的答案(因为它使用Java来表示换行而不是EL)但是这里<c:set />元素用于设置属性:

<c:set var="newline" value="<%= \"\n\" %>" />
${fn:replace(myAddress, newline, "<br />")}
Run Code Online (Sandbox Code Playgroud)

下面的代码片段也可以,但是<c:set />元素的第二行不能缩进(并且可能看起来更丑):

    <c:set var="newline" value="
" /><!--this line can't be indented -->
    ${fn:replace(myAddress, newline, "<br />")}
Run Code Online (Sandbox Code Playgroud)


bou*_*sch 7

此解决方案比您自己的解决方案更优雅,该解决方案直接设置pagecontext属性.你应该使用这个<c:set>标签:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<c:set var="newLine" value="\n"/>
${fn:replace(data, newLine, "; ")}
Run Code Online (Sandbox Code Playgroud)

顺便说一句:${fn:replace(data, "\n", ";")}不起作用.