我有一个bean对象的列表传入我的JSP页面,其中一个是注释字段。该字段可能包含换行符,并且我想使用JSTL用分号替换它们,以便字段可以显示在文本输入中。我找到了一个解决方案,但它不是很优雅。我将在下面作为可能性发布。如何使用JSP和JSTL替换换行符?
回答
这是我找到的解决方案。但它看起来并不很优雅:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<% pageContext.setAttribute("newLineChar", "\n"); %>
${fn:replace(item.comments, newLineChar, "; ")}
你应该可以用fn:replace来做到这一点。
您需要的标记库导入您的JSP与以下声明:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
然后你可以用下面的表达式用分号来代替换行的出现在$ {数据}:
${fn:replace(data, "\n", ";")}
该文档对这个东西并不是很好,我没有机会测试它。
我很确定这是我第一次尝试,而且没有奏效。但是,我没有时间重新测试它,所以我可能是错的。 – parkerfath 2008-09-12 22:52:40
您可以编写自己的JSP函数来进行替换。
这意味着你最终的东西,如:
<%@ taglib prefix="ns" uri="..." %>
...
${ns:replace(data)}
凡ns
是一个命名空间前缀定义和replace
是你的JSP的功能。
这些函数很容易实现(它们只是一个静态方法),尽管目前我似乎无法找到写这些函数的好参考。
您可以创建自己的JSP功能。 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPTags6.html
这大致是你需要做的。
创建一个标签库描述符文件
/src/META-INF/sf.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>sf</short-name>
<uri>http://www.stackoverflow.com</uri>
<function>
<name>clean</name>
<function-class>com.stackoverflow.web.tag.function.TagUtils</function-class>
<function-signature>
java.lang.String clean(java.lang.String)
</function-signature>
</function>
</taglib>
创建功能逻辑的Java类。
com.stackoverflow.web.tag.function.TagUtils
package com.stackoverflow.web.tag.function;
import javax.servlet.jsp.tagext.TagSupport;
public class TagUtils extends TagSupport {
public static String clean(String comment) {
return comment.replaceAll("\n", "; ");
}
}
在你的JSP您可以访问你的函数以下列方式。
<%@ taglib prefix="sf" uri="http://www.stackoverflow.com"%>
${sf:clean(item.comments)}
在设置var的值中,在双引号之间按下ENTER键。
$ {FN:更换(数据,newLineChar, “”)}
该解决方案是比你自己的解决方案,它是设置的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, "; ")}
BTW:${fn:replace(data, "\n", ";")}
不起作用。
\ n不代表EL表达式中的换行符。
将pageContext
属性设置为换行符并将其与JSTL的fn:replace
函数一起使用的解决方案确实有效。
不过,我更喜欢使用雅加达字符串标签库来解决这个问题:
<%@ taglib prefix="str" uri="http://jakarta.apache.org/taglibs/string-1.1" %>
...
<str:replace var="result" replace="~n" with=";" newlineToken="~n">
Text containing newlines
</str:replace>
...
你可以使用任何你想要的newlineToken; “〜n”不太可能出现在我正在替换的文本中,所以对我来说这是一个合理的选择。
这并没有为我工作:
<c:set var="newline" value="\n"/>
${fn:replace(data, newLine, "; ")}
这并不:
<% pageContext.setAttribute("newLineChar", "\n"); %>
${fn:replace(item.comments, newLineChar, "; ")}
只需使用fn:replace()
功能通过;
更换\n
。
${fn:replace(data, '\n', ';')}
在你使用Apache的EL实现,而不是甲骨文的EL参考实现(即,当你使用Tomcat,TomEE时,JBoss等,而不是GlassFish中,似鲭水狼牙鱼,WildFly中,WebSphere等)的情况下,则您需要重新转义反斜杠。
${fn:replace(data, '\\n', ';')}
为了记录在案,我碰到这个职位后来虽然解决这个问题:
在JSTL多行字符串被添加为textarea的title属性。然后,Javascript将此添加为textarea的默认文本。为了清楚地理解这个文本,这个值需要等于标题......但是失败的是许多文本编辑器放弃\ r \ n而不是\ n。所以follownig将摆脱不必要的\的r:
<% pageContext.setAttribute("newLineChar", "\r"); %>
<c:set var="textAreaDefault" value="${fn:replace(textAreaDefault, newLineChar, '')}" />
更容易:
<str:replace var="your_Var_replaced" replace="\n" with="Your ney caracter" newlineToken="\n">${your_Var_to_replaced}</str:replace>
如果你真正需要的是一个\ n符号您可以从here使用建议:
${fn:replace(text, "
", "<br/>")}
或
<c:set var="nl" value="
" /><%-- this is a new line --%>
这包括字符串文字中的新行。
(因为它是使用Java来表示换行,而不是EL),但这里的< c本类似于接受的答案:设置/ >元件用于设置属性:
<c:set var="newline" value="<%= \"\n\" %>" />
${fn:replace(myAddress, newline, "<br />")}
的下面的代码段也适用,但< C的第二行:set/>元件不能被缩进(和可能看起来不美观):
<c:set var="newline" value="
" /><!--this line can't be indented -->
${fn:replace(myAddress, newline, "<br />")}
这是JSP EL一个有效的解决方案:
"${fn:split(string1, Character.valueOf(10))}"
- 1. 如何使用gsub替换换行符?
- 2. 如何替换jsp中的字符串
- 3. 表中的JSP/JSTL文字换行
- 4. 如何用换行符替换空格只在换行符上?
- 5. 如何用JavaScript中的空格替换换行符/换行符?
- 6. 将JSP转换为JSTL
- 7. 用换码符替换换行符
- 8. 如何在Xcode中使用查找和替换替换多行新行在Xcode中使用查找和替换
- 9. 如何使用JSTL/EL将动态脚本转换为JSP 2.0?
- 10. 替换换行符
- 11. 如何在Liferay JSP中将JSTL变量转换为字符串?
- 12. 如何替换VIM中的换行符
- 13. JSP使用JSTL和脚本
- 14. 如何用JSTL替换表格行的背景颜色?
- 15. 如何用'\'替换'/'使用QString替换()?
- 16. 如何使用JSP替换HTML表格行颜色?
- 17. 如何用JSP替换单引号
- 18. 搜索和替换VS2008 - 换行符
- 19. 用字符替换换行符
- 20. 用换行符替换字符串PHPStorm
- 21. 使用替换的Javascript替换字符()
- 22. 替换\ r \ n使用XSLT和.NET的换行符VS 2008
- 23. 查找和替换使用Microsoft.Office.Interop.Word不支持换行符vb.net
- 24. 如何用Emacs中的换行符替换字符?
- 25. 如何用emacs中的换行符(LF)替换空格字符?
- 26. iText - 换行符替换为?
- 27. Java String.replaceAll()替换换行符
- 28. 如何替换使用PHP ereg_replace替换所有特定字符?
- 29. 如何使用JavaScript字符串替换方法替换“+”号?
- 30. 如何用一个换行符替换包含任何换行符和空格序列的字符串
虽然这是我自己的答案,但我接受了这一点,因为它最简单,而且我发现它确实可行。 – parkerfath 2009-02-12 00:06:43
这是不必要的。只是越过反斜杠:http://stackoverflow.com/questions/58054/how-can-i-replace-newline-characters-using-jsp-and-jstl/1690942#1690942 – BalusC 2010-02-11 11:37:26
我试着只是逃避反斜杠,它没有也不行。我上面列出的设置pageContext属性的方法仍然是我可以使其工作的唯一方法。尽管如BalusC所说,用一些简单的方法你可能会有更好的运气。可能很好,在这里有所有的选择。 – parkerfath 2010-02-19 19:44:41