在c:set中使用c:url

时间:2011-12-23 09:13:16

标签: jsp jstl

我需要使用一些链接作为<spring:message />的参数,并使用<c:set/>。要使用相对于contextPath的链接,我使用<c:url>。为什么在<c:url/>里面使用<c:set/>如下所示不起作用?

<c:set value='<c:url value="/x"/>' var='doc1'/>
<spring:message code="doc.link" arguments="${doc1}"/> <%-- ${doc1} is empty --%>

使用<a href/>的Simlar效果很好:

<c:set value='<a href="/fullurl/x">here</a>' var='doc1'/>
<spring:message code="doc.link" arguments="${doc1}"/>

messages.properties:

doc.link = Doc is {0}

修改 我需要完全像这样的工作:

<c:set value='<a href="<c:url value="/x"/>">here</a>' var='doc1'/>

3 个答案:

答案 0 :(得分:14)

将它放在标签正文中:

<c:set var="doc1"><a href="<c:url value="/x" />">here</a></c:set>
<spring:message code="doc.link" arguments="${doc1}"/>

或者如果你想要XML良好形式:

<c:url var="url" value="/x" />
<c:set var="doc1"><a href="${url}">here</a></c:set>
<spring:message code="doc.link" arguments="${doc1}"/>

答案 1 :(得分:4)

<c:url>可以选择将结果设置为变量,而不是输出它。只需设置var属性即可。

<c:url value="..." var="doc1" />

答案 2 :(得分:3)

你可以这样做:

<c:url var="myURL" value="/x" />
<spring:message code="doc.link" arguments="${myURL}" />

由于您的邮件是doc.link = Doc is {0},邮件末尾会显示{0},因此您只需将邮件更改为doc.link = Doc is,然后执行以下操作:

<spring:message code="doc.link" /><a href="<c:url value="/x"/>">here</a>

这将完全符合您的要求!