如何在jstl代码中混合href

时间:2013-08-06 15:53:54

标签: jstl

当我使用下面的jstl代码时

  <a href="http://mysite.com?id="<c:out value="${myid}"/>/><c:out value="${myid}"/></a> 

输出是:

“1234”

值1234对应于myid的变量值,但生成的url是 “http://mysite.com?id=”因此,作为href的一部分,myid没有生成任何值。

如何修改href以显示整个href:

http://mysite.com?id=1234

而不是:

http://mysite.com?id=

2 个答案:

答案 0 :(得分:22)

最终,JSP / JSTL生成HTML。你熟悉basic HTML,对吗?

通过右键单击浏览器中的查看源,仔细查看生成的HTML输出。你会看到:

<a href="http://mysite.com?id="1234/>1234</a> 

那是valid HTML吗?不,您在"错误的地方过早关闭属性值,并且您使用/>过早关闭了代码。看,Stack Overflow HTML语法荧光笔也搞糊涂了。相反,应该是:

<a href="http://mysite.com?id=1234">1234</a> 

相应地修复HTML生成器(即JSP / JSTL代码),以便生成所需的HTML:

<a href="http://mysite.com?id=<c:out value="${myid}"/>"><c:out value="${myid}"/></a> 

对于具体问题,

无关<c:out>仅在重新显示用户控制的输入以及实际上错误的内联网址参数工具时有助于防止XSS attack holes。如果您可以保证${myid}始终是一个数字(因为它是LongInteger),您甚至可以完全保留它,使代码更漂亮:

<a href="http://mysite.com?id=${myid}">${myid}</a> 

但如果${myid}不能保证是一个数字(因为它是String),那么您应该使用<c:url><c:param>来正确{{3}它:

<c:url value="http://mysite.com" var="myURL">
    <c:param name="id" value="${myid}" />
</c:url>
<a href="${myURL}"><c:out value="${myid}" /></a>

答案 1 :(得分:3)

<c:url>标记用于创建网址。如果客户端关闭cookie,则会有所帮助,并且您需要重写将从jsp页面返回的URL。

<c:param>标记可用作在返回的URL中添加参数的子标记。使用这些参数对URL进行编码。

<c:url value="http://mysite.com" var="myURL">
   <c:param name="id" value="${myid}" />
</c:url>

<a href="${myURL}" />${myURL}</a>

here了解详情。