У меня есть поле объекта с фамилией человека.
Если я использую $ {person.lastName} , я получу О'Брайан
Если я использую
<c:out value="${person.lastName}"/>
Я понимаю О'Брайана
Оба выхода прерывают следующий код JSP в IE
<a href="#"
class="delete"
onclick="if(confirm('<c:out value="${application.lastName}"/> ' + _('Are you sure you want to delete this application?'))) {deleteApplication('${application.identifier}')};return false;"><bean:message key="application.delete"/></a>
потому что он преобразуется в
onclick="if(confirm('O'Brian '
или
onclick="if(confirm('O'Brian '
Мне нужно было бы О'Брайан , чтобы сбежать как О \ 'Брайан
Есть идеи, как решить эту проблему?
РЕШЕНИЕ
Наиболее элегантные решения, кажется, используют простой тег.
package view;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class EscapeJS extends SimpleTagSupport {
public String str;
public void doTag() throws JspException, IOException {
getJspContext().getOut().print(str.replaceAll("\'", "\\\\'"));
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
Затем поместите в WEB-INF файл utils.tld:
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>bean</shortname><uri>utilsTags</uri>
<uri>utilsTags</uri>
<tag>
<name>escapeJS</name>
<tagclass>view.EscapeJS</tagclass>
<bodycontent>scriptless</bodycontent>
<attribute>
<name>str</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
Тогда внутри вашего jsp:
<%@ taglib prefix="utils" uri="utilsTags" %>
<utils:escapeJS str="${application.firstName}"/>