当我使用下面的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:
而不是:
答案 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}
始终是一个数字(因为它是Long
或Integer
),您甚至可以完全保留它,使代码更漂亮:
<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)