当前位置: 首页 > 知识库问答 >
问题:

有没有更好的方法来编写这个JSP自定义标记?

雍志新
2023-03-14

我正在创建一个JSP. tag文件来处理这个用例:

<my:safeParam paramName="param1" defaultValue="testvalue"/>

其中,行为将是获取请求参数,转义其值以“安全”使用,并将转义值放回某个作用域(例如请求),与参数同名(尽管它可能是另一个名称)。

我有一个可以工作的实现,但我有scriptlet,因为我找不到在JSTL中使用变量名的方法。但我不是JSTL向导,所以我想看看我是否缺少语法/方法。这是正在工作的safeParam。标签文件:

<%@ 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>

(我真希望艾尔能自动逃脱。)

共有2个答案

穆丁雨
2023-03-14

我可能不会使用这种方法,因为它降低了我用这个自定义标记寻求的简洁性,但只是作为一个选项记录它。。。(我不确定这是否是杨富强的意思。)

我可以让标签简单地输出默认或转义的参数值,然后让标签的用户在

标签:

<c:choose>
<c:when test="${empty param[paramName]}">
    ${defaultValue}
</c:when>
<c:otherwise>
    <c:out value="${param[paramName]}"/>
</c:otherwise>
</c:choose>

JSP:

<c:set var="myVariable">
    <my:safeParam paramName="folder" defaultValue="homeFolder"/>
</c:set>

但实际上,我的目标是做标签内的所有事情。

卫甫
2023-03-14
<c:if test="${empty paramName}">
    ${defaultValue}
</c:if>
<c:if test="${not empty paramName}">
    <c:out value="${paramName}" escapeXml="true"/>
</c:if>
 类似资料: