2011-03-09 16 views
1

나는 함수가 Escape()가 JSTL의 javascript, escapeXml에 있다는 것을 알고있다. 나는이 문제를 해결하기 위해 여러 가지 방법을 사용했으나 해결책을 얻지 못했다. JSP에서 특수 문자를 JavaScript로 전달하는 방법은 무엇입니까?

JSTL 변수는 $ {str}의 값이 "system # with^% $/<"이라고 가정합니다.

Error: unterminated string literal Source File: http://localhost:8080/ .. Line: 1, Column: 27 Source Code: special('system # with ^%$/<

나는 통과 할 수 아니다 - :

는 내가 같은 오류가

의 OnClick = "('$ {STR}') 특별한"와 같은 자바 스크립트에이 값을 전달 문자열 자체는 javaScript입니다.

추신 : 나는 위의 오류 문을 mozilla 오류 콘솔에서 복사했습니다.

+0

대신 뷰 소스를 게시하십시오. – mplungjan

답변

2

문자열에서 작은 따옴표를 두 번 이스케이프 처리해야하는 것처럼 들립니다. 나는 당신이 정의한 함수를 사용하여이 작업을 수행한다. fn:replace()이 아니라 따옴표 붙이기가 딱딱하다.

가장 간단한 방법은 Apache StringEscapeUtils#escapeJavaScript() 기능을 사용하는 것입니다.

JavaScript 문자열 규칙을 사용하여 String의 문자를 이스케이프 처리합니다.

발견 된 모든 값을 JavaScript 문자열 양식으로 이스케이프 처리합니다. 따옴표 및 제어 문자 (탭, 백 슬래시, cr, ff 등)를 올바르게 처리하십시오.

따라서 탭의 문자는 '\\''t'이됩니다.

자바 문자열과 JavaScript 문자열의 유일한 차이점은 자바 스크립트에서> 작은 따옴표를 이스케이프해야한다는 것입니다.

예 :

request.setAttribute("str", 
    StringEscapeUtils.escapeJavaScript("\"system # with ^%$/<\"")); 

이 그런 다음 JSP는 단순히 포함 할 수 있습니다 :

... onclick="'${str}'" ... 

사용자 정의 EL 함수를 만들 수

input string: He didn't say, "Stop!" 
output string: He didn\'t say, \"Stop!\" 

그래서 서블릿은이 작업을 수행 할 수 이 작업을 수행하려면 (동일한을 사용하십시오.기능)하지만 더 복잡합니다.

+0

매트가 컨트롤러에서 전체 컬렉션을 전달하고 있습니다. 그래서 $ {str}은 jSTL 변수입니다. scriptlet 태그에서 request 속성을 설정하기 위해 어떻게 사용할 수 있습니까? – ayyappa

+0

@ayyappa : 아하! 이 경우 EL 함수를 만들어야합니다. 그것 [여기] (http://www.noppanit.com/how-to-create-a-custom-function-for-jstl/)을하는 방법의 좋고, 짧은 지시. 오라클의 문서 [here] (http://download.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html#wp77078). –

+0

encodeURI 메소드를 사용할 수 있습니까? – ayyappa

관련 문제