2011-10-22 99 views
0

我想將一個定位標記放入Struts2變量中,然後我可以在JSP中的各個點上顯示它。這樣我就可以避免重複用於構建各種形式的href標籤的複雜if/then語句。將href鏈接放入Struts2集標記

我正在使用Struts的'set'標籤來執行此操作。

問題是,Struts會將'<'字符轉換爲htmlentities,當頁面顯示時,我會看到顯示的實際「a href = someURL」標籤,而不是工作鏈接。

如果我爲s添加「escape ='true'」參數:設置它的功能相同,只顯示'<'和'>'標籤的高度。

如何將有效的錨標籤放入Struts2變量中,然後將其顯示爲工作鏈接?

下面是我在做什麼:

<s:set name="composerName"> 

<s:property value="'a href=%{viewRecordURL}>'" escape="false"/> 

<s:property value="#composer.title" /> 

<s:property value="#composer.firstName" /> 

<s:property value="#composer.lastName" /> 

<s:property value="'</a>'" escape="false" /> 

</s:set> 

回答

0

這不是你想怎麼打造這個 - 你有什麼是兩回事,一個URL,該URL的文本字符串。您已有的網址。鏈接文字只能使用<s:set>

如果你真的需要,你可以把它包裝成一個基於JSP的自定義標籤,但我不會打擾。

+0

問題創造URL像一提的是,我需要換兩部分,1)URL - 使用S這是在一個迭代器(未顯示定義): url); 2)將s:a標籤的文本字符串轉換爲Struts s:set變量,以便它可以在頁面中的各個位置使用,而無需重新創建用於創建替代版本的某些邏輯(爲簡潔起見,也未顯示)的鏈接。但請參閱下面我自己的回答。 – Ron

+0

@Ron然後,我可能會考慮嘗試''。我並不是很瞭解你在做什麼,我還不確定這是否是一種很好的方法 - 迄今爲止,這種觀點太多了。 –

1

使用s:url創建一個有效的網址,然後用它在s:a中生成鏈接。

您可以參考下面的鏈接瞭解詳情:

http://struts.apache.org/2.1.8/docs/a.html

+0

雖然沒有很好的理由使用'',除非您將它用於Ajax請求。 –

0

我會回答我的問題。也許別人有一個更優雅的解決方案。再次,我們試圖將一個錨標記和一個url都放到s:set變量中。問題有兩個:1)將s:設置爲將標記字符串視爲文字字符串,而不是Object(它想從ActionContext或某處獲取),以及2)關閉轉義,以便錨點的字符串文本標記不會轉換爲'& lt;'之類的特徵。

對於1,我將var設置爲null,但提供了默認參數,其中s:property始終被視爲文字字符串。

對於#2,這只是在正確的地方使用escape =「false」的問題。

不幸的是,字符串必須用s:屬性的單獨位來構建,但是你能做什麼?

<s:set name="composerName" > 
    <s:property value="" default="<a href=" escape="false"/> 
    <s:property value="" default="'" /> 
    <s:property value="%{viewRecordURL}" escape="true"/> 
    <s:property value="" default="'>" escape="false" /> 
    <s:property value="#composer.title" /> 
    <s:property value="#composer.firstName" /> 
    <s:property value="#composer.lastName" /> 
    <s:property value="" default="</a>" escape="false"/> 
</s:set> 

我沒有使用UTF-8字符或潛在有問題的字符,如「&」,撇號,或在#composer部分單引號測試它。

+0

仍然如此。視野中的工作太多;我不明白這個用例。 –

+0

發生了什麼事是這個JSP使用Springframework的authz:authorize標籤和Struts2。 Struts被要求做的很多事情取決於基於Spring的條件語句。所以這個JSP最終成爲兩者之間的中介。有一個定義的Struts bean,我可以把這些醜陋的東西扔到那裏,我想,把它從JSP中解放出來。 – Ron

+0

第二個想法是,有一堆東西使用來自外部資源文件的字符串,來自Action類的值和Spring。即使我在調用某個實用bean來構建鏈接(並擺脫醜陋的Struts代碼)時將這一切都放在一起,與整體相比,代碼減少量可以忽略不計。 – Ron

0

我們可以使用URL標記下面

<s:url id="hLink" action="yourStrutsActionName"> 
    <s:param name="propertyName" value="%{propertyName}" /> 
</s:url> 
<td><s:a href="%{hLink}"><s:property value="%{propertyName}"/></s:a></td> 
+0

屬性'ID'已棄用,而不是使用'var'。 –