Bạn có thể sử dụng phương pháp Apache Commons Lang 3.xStringEscapeUtils#escapeEcmaScript()
cho điều này trong EL.
Đầu tiên tạo một /WEB-INF/functions.taglib.xml
mà trông như thế này:
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
version="2.0">
<namespace>http://example.com/functions</namespace>
<function>
<name>escapeJS</name>
<function-class>org.apache.commons.lang3.StringEscapeUtils</function-class>
<function-signature>java.lang.String escapeEcmaScript(java.lang.String)</function-signature>
</function>
</taglib>
Sau đó đăng ký nó trong /WEB-INF/web.xml
như sau:
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/functions.taglib.xml</param-value>
</context-param>
Sau đó, bạn có thể sử dụng nó như sau:
<html ... xmlns:func="http://example.com/functions">
...
<script>var foo = '#{func:escapeJS(bean.foo)}';</script>
...
<h:xxx ... onclick="foo('#{func:escapeJS(bean.foo)}')" />
Ngoài ra, nếu bạn tình cờ đã sử dụng thư viện tiện ích JSF OmniFaces, sau đó bạn cũng có thể chỉ sử dụng chức năng được tích hợp sẵn của nó of:escapeJS()
:
<html ... xmlns:of="http://omnifaces.org/functions">
...
<script>var foo = '#{of:escapeJS(bean.foo)}';</script>
...
<h:xxx ... onclick="foo('#{of:escapeJS(bean.foo)}')" />
Câu trả lời bên dưới giúp tôi theo dõi đúng. – Ontonomo
đã thêm: xmlns: fn = "http://java.sun.com/jsp/jstl/functions" và trong mã '# {fn: replace (_selectedItem.item.webName, "'", "")} ' , – Ontonomo