У меня есть список объектов 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 нажмите клавишу ВВОД между двойными кавычками.
$ {п: заменить (данные, 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, "; ")}
КСТАТИ: ${fn:replace(data, "\n", ";")}
не работает.
\ n не представляет символ новой строки в выражении EL.
Решение, которое устанавливает атрибут pageContext
символу новой строки, а затем использует его с функцией JSTL fn:replace
, действительно работает.
Однако я предпочитаю использовать Jakarta Струнный Tab Library, чтобы решить эту проблему:
<%@ 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', ';')}
В случае, если вы используете реализацию Апача EL вместо эталонной реализации EL Oracle (то есть, когда вы используете Tomcat, TomEE, JBoss, и т.д. вместо GlassFish, скумбриевидный гидролик, WildFly, WebSphere, и т.д.), то вам нужно снова избежать обратную косую черту.
${fn:replace(data, '\\n', ';')}
Для записи, я наткнулся на этот пост в то время как решение этой проблемы:
многострочный строки в JSTL добавляется в качестве заголовка атрибут текстового поля. Затем Javascript добавляет это как текст по умолчанию в текстовое поле. Чтобы очистить этот текст от фокуса, значение должно совпадать с заголовком ... но сбой, так как много текстовых редакторов помещают \ r \ n вместо \ n. Так follownig избавится от нежелательных \ г:
<% 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>
Если то, что вам действительно нужно, а \ п символов вы можете использовать советы от here:
${fn:replace(text, "
", "<br/>")}
или
<c:set var="nl" value="
" /><%-- this is a new line --%>
Это включает в себя новую строку в строковом литерале.
Это аналогично принятому ответ (потому что он использует Java для представления новой строки, а не Е.Л.), но здесь < с: набор/> элемент используется для установки атрибута:
<c:set var="newline" value="<%= \"\n\" %>" />
${fn:replace(myAddress, newline, "<br />")}
следующий фрагмент кода работает, но вторая линия < с: установить/> элемент не может быть отступом (и может выглядеть уродливее):
<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. Заменить символы новой строки и двойные кавычки символов в строке с помощью JSP и JSTL
- 2. Заменить символы новой строки в
- 3. Как заменить символы с символом новой строки?
- 4. Как заменить символы новой строки на символы табуляции?
- 5. Regex заменить все символы новой строки запятой
- 6. заменить последовательное пространство, вкладку, символы новой строки
- 7. MySQL не может заменить символы новой строки
- 8. Заменить символы новой строки в таблице
- 9. Как заменить символы новой строки только между числами и предложением?
- 10. Как заменить символы периода символами новой строки в vi?
- 11. Заменить строку с помощью новой строки PHPStorm
- 12. Streams, символы и символы новой строки
- 13. с использованием fn: заменить и экранировать специальные символы в jstl
- 14. Заменить строку с другой, который содержит символы новой строки
- 15. Использование Perl, как я могу заменить символы новой строки запятыми?
- 16. Как заменить символы новой строки запятыми, используя `tr`?
- 17. Как заменить символы «новой строки» внутри двойных кавычек в php?
- 18. Как заменить парные жетоны на возможные символы новой строки внутри?
- 19. Путь лишить символы новой строки
- 20. Собственные символы новой строки?
- 21. отображение данных в jsp с помощью jstl
- 22. Поймать ошибки в jsp с помощью jstl
- 23. Bash Concatenate и Заменить возврат каретки с помощью новой строки
- 24. Заменить текст символами новой строки
- 25. Javascript заменить символ новой строки
- 26. Process.StandardOutput.ReadToEnd() и посторонние символы новой строки
- 27. JSTL, jsp и Dojo parsing issue
- 28. Thymeleaf: заменить символы новой строки <br>
- 29. JSP/JSTL не работает
- 30. Mathematica StringReplace заменить подстроку, содержащую символы новой строки
Я принимаю это, хотя это мой собственный ответ, потому что он прост и я нашел его на самом деле. – 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