如何使用JSTL标记转义EL中的字符?

时间:2009-06-15 02:30:07

标签: jsp jstl el

我有这个JSP代码片段:

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

<c:choose>
  <c:when test="${var1.properties[\"Item Type\"] eq \"Animal's Part\"}">
    <c:set var="cssClassName" value="animalpart" />
  </c:when>
  <c:otherwise>
    <c:set var="cssClassName" value="" />
  </c:otherwise>
</c:choose>

服务器无法编译JSP。但是,如果我从“动物的部分”中删除字符“'”,则可以编辑。我试图通过使用“\”字符来逃避它,但它仍然给我错误。

任何建议/帮助表示赞赏。我试图尽可能避免使用scriptlet。

感谢。

编辑:我设法让它工作(发布到StackOverflow之后),作为此问题的解决方案之一发布。我尝试过之前发布的其他解决方案(由Vincent和Eddie发布),然而,不幸的是,没有一个在我的环境中有效,尽管我认为它们可能在答案环境中有效。感谢。

4 个答案:

答案 0 :(得分:6)

试试这个

<c:when test='${var1.properties["Item Type"] eq "Animal\'s Part"}'>

答案 1 :(得分:3)

您有两个简单的选择:

<c:when test="${var1.properties['Item Type'] eq 'Animal\'s Part'}">

<c:when test='${var1.properties["Item Type"] eq "Animal\'s Part"}'>

答案 2 :(得分:3)

这是我的用例中的解决方案:

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

<c:set var="itemType"        value="${var1.properties[\"Item Type\"]}" />
<c:set var="item_animalpart" value="Animal's Part" />
<c:set var="item_treepart"   value="Tree's Part" />

<c:choose>
  <c:when test="${itemType eq name_item_animalpart}">
    <c:set var="cssClassName" value="animalpart" />
  </c:when>
  <c:when test="${itemType eq name_item_treepart}">
    <c:set var="cssClassName" value="treepart" />
  </c:when>
  <c:otherwise>
    <c:set var="cssClassName" value="" />
  </c:otherwise>
</c:choose>

答案 3 :(得分:0)

使用escapeXml =“false” 例如:

<c:out value="${formulario}" escapeXml="false" />