2014-04-18 48 views
0

我创建一个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被自动转义。)

回答

0
<c:if test="${empty paramName}"> 
    ${defaultValue} 
</c:if> 
<c:if test="${not empty paramName}"> 
    <c:out value="${paramName}" escapeXml="true"/> 
</c:if> 
+0

在自定义标签中,参数名称不是'param1',它是任何传递给属性'paramName'中的标签的东西。 – dbreaux

+0

只需将“param1”更改为“paramNamed” –

+0

我认为您误解了我所要求的内容。我希望''是一个来自请求参数的值,我想将它设置为一个无论名字传入的变量。这只是输出默认值或传入内容的转义值。 – dbreaux

0

我可能是因为它减少我与这个自定义标签求简洁将不会使用这种方法,但只是为了将它记录为一个选项......(我不确定这是否是Frank Yeung正在做的。)

我可以让标记输出默认或转义的参数值,然后使标签的用户包装在中10。

标签:

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

但真的是我的目标一直是做标签内的一切。

相关问题