我创建一个JSP文件.TAG将处理这个用例:有没有更好的方式来编写这个JSP自定义标签?
<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被自动转义。)
在自定义标签中,参数名称不是'param1',它是任何传递给属性'paramName'中的标签的东西。 – dbreaux
只需将“param1”更改为“paramNamed” –
我认为您误解了我所要求的内容。我希望''是一个来自请求参数的值,我想将它设置为一个无论名字传入的变量。这只是输出默认值或传入内容的转义值。 –
dbreaux