我有一個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