문제

내 JSP 페이지에 전달된 Bean 개체 목록이 있는데 그 중 하나가 주석 필드입니다.이 필드에는 개행 문자가 포함될 수 있으며 JSTL을 사용하여 이를 세미콜론으로 대체하여 필드가 텍스트 입력에 표시될 수 있도록 하고 싶습니다.한 가지 해결책을 찾았지만 그다지 우아하지는 않습니다.가능성이 있어 아래에 포스팅하겠습니다.

도움이 되었습니까?

해결책

내가 찾은 해결책은 다음과 같습니다.하지만 그다지 우아해 보이지는 않습니다.

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

${fn:replace(item.comments, newLineChar, "; ")}

다른 팁

그냥 사용 fn:replace() 교체하는 기능 \n ~에 의해 ;.

${fn:replace(data, '\n', ';')}

Oracle의 EL 참조 구현 대신 Apache의 EL 구현을 사용하는 경우(예:GlassFish, Payara, WildFly, WebSphere 등 대신 Tomcat, TomEE, JBoss 등을 사용하는 경우 백슬래시를 다시 이스케이프해야 합니다.

${fn:replace(data, '\\n', ';')}

이는 허용된 답변과 유사하지만(EL이 아닌 줄 바꿈을 표시하기 위해 Java를 사용하기 때문에) 여기서 <c:set/> 요소는 속성을 설정하는 데 사용됩니다.

<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 />")}

이 솔루션은 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", ";")} 작동하지 않습니다.

이것은 나에게 작동하지 않습니다.

<c:set var="newline" value="\n"/>
${fn:replace(data, newLine, "; ")}

이는 다음을 수행합니다.

<% pageContext.setAttribute("newLineChar", "\n"); %> 
${fn:replace(item.comments, newLineChar, "; ")}

자신만의 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)}

정말로 필요한 것이 기호라면 다음의 조언을 사용할 수 있습니다. 여기:

${fn:replace(text, "
", "<br/>")}

또는

<c:set var="nl" value="
" /><%-- this is a new line --%>

여기에는 문자열 리터럴의 새 줄이 포함됩니다.

fn:replace를 사용하여 이를 수행할 수 있어야 합니다.

다음 선언을 사용하여 태그 라이브러리를 JSP로 가져와야 합니다.

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

그런 다음 다음 표현식을 사용하여 ${data}에서 줄 바꿈 항목을 세미콜론으로 바꿀 수 있습니다.

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

이 항목에 대한 문서는 훌륭하지 않으며 테스트할 기회가 없었습니다.

은 EL 표현식의 개행 문자를 나타내지 않습니다.

설정하는 솔루션 pageContext 개행 문자에 속성을 부여한 다음 JSTL과 함께 사용합니다. fn:replace 기능이 작동합니다.

그러나 나는 이 문제를 해결하기 위해 Jakarta String 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"은 내가 교체하는 텍스트에 표시될 가능성이 낮으므로 나에게는 합리적인 선택이었습니다.

더 쉽게:

<str:replace var="your_Var_replaced" replace="\n" with="Your ney caracter" newlineToken="\n">${your_Var_to_replaced}</str:replace>  

이것은 JSP EL에 대한 유효한 솔루션입니다.

"${fn:split(string1, Character.valueOf(10))}"

교체를 수행하기 위해 자신만의 JSP 함수를 작성할 수 있습니다.

이는 다음과 같은 결과가 발생함을 의미합니다.

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

어디 ns 은 사용자가 정의한 네임스페이스 접두사이며 replace JSP 기능입니다.

이 함수는 구현하기가 매우 쉽지만(그냥 정적 메서드임) 현재로서는 이를 작성하기 위한 좋은 참조를 찾을 수 없는 것 같습니다.

var를 설정할 때 값에서 큰따옴표 사이에 Enter 키를 누르세요.

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

참고로 저는 이 문제를 해결하는 동안 다음 게시물을 발견했습니다.

JSTL의 여러 줄 문자열은 텍스트 영역의 제목 속성으로 추가됩니다.그런 다음 Javascript는 이를 텍스트 영역의 기본 텍스트로 추가합니다.초점에서 이 텍스트를 지우려면 값이 제목과 같아야 합니다...그러나 많은 텍스트 편집기가 대신 을 넣으면 실패합니다.따라서 다음 작업은 원치 않는 을 제거합니다.

<% pageContext.setAttribute("newLineChar", "\r"); %> 
<c:set var="textAreaDefault" value="${fn:replace(textAreaDefault, newLineChar, '')}" />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top