2011-12-23 38 views
5

Tôi cần sử dụng một số liên kết làm đối số cho <spring:message /> và sử dụng <c:set/> cho điều đó. Để có liên kết liên quan đến contextPath tôi sử dụng <c:url>. Tại sao sử dụng <c:url/> trong <c:set/> bên trong như bên dưới không hoạt động?Sử dụng c: url trong c: set

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

Simlar sử dụng <a href/> làm việc tốt:

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

EDIT tôi cần phải làm việc một cách chính xác cái gì đó như thế:

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

Trả lời

13

Đặt nó trong cơ thể tag:

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

Hoặc nếu bạn muốn XML nổi formness:

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

<c:url> có tùy chọn để đặt kết quả thành biến thay vì xuất kết quả. Chỉ cần đặt thuộc tính var.

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

Tôi không đồng ý. Tôi đang sử dụng một cái gì đó như thế: '" /> 'mà không có thuộc tính var. – marioosh

+1

không đồng ý với những gì? Nó có một _option_ để làm điều đó. Nếu bạn không sử dụng tùy chọn đó, nó sẽ xuất kết quả cho Nếu bạn sử dụng nó (chỉ định 'var'), nó sẽ được lưu ở đó thay vì – Bozho

+0

@marioosh vui lòng xem câu trả lời cập nhật của tôi – adarshr

3

Bạn có thể làm điều này:

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

Bởi vì thông điệp của bạn là doc.link = Doc is {0} nơi trong {0} xuất hiện ở cuối của thông điệp, bạn chỉ có thể thay đổi các thông điệp tới doc.link = Doc is và làm như sau:

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

Điều đó sẽ làm chính xác những gì bạn muốn làm!