【发布时间】:2014-04-18 22:30:36
【问题描述】:
我正在创建一个 JSP .tag 文件来处理这个用例:
<my:safeParam paramName="param1" defaultValue="testvalue"/>
行为将是获取请求参数,转义其值以“安全”使用,并将转义值放回与参数相同名称的某个范围(例如请求)中(尽管它可能是另一个名称)。
我有一个可行的实现,但我有scriptlet,因为我找不到仅在JSTL 中使用变量名称的方法。但我不是 JSTL 向导,所以我想看看是否有我遗漏的语法/方法。这是有效的safeParam.tag 文件:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ attribute name="paramName" required="true" %>
<%@ attribute name="defaultValue" %>
<%
String name = (String) pageContext.getAttribute("paramName");
%>
<c:if test="${not empty defaultValue}">
<%
request.setAttribute(name, pageContext.getAttribute("defaultValue"));
%>
</c:if>
<c:if test="${not empty param[paramName]}">
<c:set var="escaped" value="${fn:escapeXml(param[paramName])}"/>
<%
request.setAttribute(name, pageContext.getAttribute("escaped"));
%>
</c:if>
(我当然希望 EL 自动转义。)
【问题讨论】: