当我使用下面的 jstl 代码时
<a href="http://mysite.com?id="<c:out value="${myid}"/>/><c:out value="${myid}"/></a>
输出是:
“1234”
值 1234 对应于 myid 的变量值,但生成的 url 是“ http://mysite.com?id= ”,因此没有生成 myid 的值作为 href 的一部分。
如何修改 href 以显示整个 href :
代替 :
当我使用下面的 jstl 代码时
<a href="http://mysite.com?id="<c:out value="${myid}"/>/><c:out value="${myid}"/></a>
输出是:
“1234”
值 1234 对应于 myid 的变量值,但生成的 url 是“ http://mysite.com?id= ”,因此没有生成 myid 的值作为 href 的一部分。
如何修改 href 以显示整个 href :
代替 :
最终,JSP/JSTL 生成 HTML。您熟悉基本的 HTML,对吗?
通过右键单击,在浏览器中查看源代码,仔细查看生成的 HTML 输出。你会看到的:
<a href="http://mysite.com?id="1234/>1234</a>
那是有效的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 攻击漏洞,实际上是内联 URL 参数的错误工具。如果您可以保证它${myid}
始终是一个数字(因为它是 aLong
或Integer
),您甚至可以完全忽略它,使代码更易于阅读:
<a href="http://mysite.com?id=${myid}">${myid}</a>
但是,如果${myid}
不能保证 a 是数字(因为它是 a String
),那么您应该使用<c:url>
and<c:param>
对其进行正确的 URL 编码:
<c:url value="http://mysite.com" var="myURL">
<c:param name="id" value="${myid}" />
</c:url>
<a href="${myURL}"><c:out value="${myid}" /></a>