Как я могу заменить символы новой строки, используя JSP и JSTL? - PullRequest
42 голосов
/ 12 сентября 2008

У меня есть список объектов bean, переданных на мою страницу JSP, и один из них - поле комментария. Это поле может содержать символы новой строки, и я хочу заменить их точкой с запятой, используя JSTL, чтобы поле могло отображаться при вводе текста. Я нашел одно решение, но оно не очень элегантное. Я опубликую ниже как возможность.

Ответы [ 14 ]

1 голос
/ 28 мая 2009

\ n не представляет символ новой строки в выражении EL.

Решение, которое устанавливает атрибут pageContext для символа новой строки, а затем использует его с функцией fn:replace JSTL, действительно работает.

Однако для решения этой проблемы я предпочитаю использовать библиотеку вкладок Джакарта:

<%@ 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" вряд ли будет отображаться в тексте, на котором я делаю замену, поэтому для меня это был разумный выбор.

0 голосов
/ 31 марта 2010

Для справки, я наткнулся на этот пост, занимаясь этой проблемой:

Многострочная строка в JSTL добавляется в качестве атрибута заголовка текстовой области. Затем Javascript добавляет это как текст по умолчанию для текстовой области. Чтобы очистить этот текст от фокуса, значение должно совпадать с заголовком ... но не удается, так как многие текстовые редакторы ставят \ r \ n вместо \ n. Таким образом, подписчик избавится от нежелательных \ r:

<% pageContext.setAttribute("newLineChar", "\r"); %> 
<c:set var="textAreaDefault" value="${fn:replace(textAreaDefault, newLineChar, '')}" />
0 голосов
/ 12 февраля 2009

В значении во время установки переменной нажмите ENTER между двойными кавычками.

$ {fn: replace (data, newLineChar, ";")}

0 голосов
/ 12 сентября 2008

Вы можете написать свою собственную функцию JSP для замены.

Это означает, что вы получите что-то вроде:

<%@ taglib prefix="ns" uri="..." %>
...
${ns:replace(data)}

Где ns - это префикс пространства имен, который вы определяете, а replace - ваша функция JSP.

Эти функции довольно легко реализовать (это просто статический метод), хотя в настоящий момент я не могу найти хорошую ссылку для их написания.

...