2010-02-10 46 views
4

在Struts中,我想有一個基礎URL(一個< S:網址...)設置與一些參數(< S:PARAM ...),然後或者參數添加到該URL或改變一些參數的值。例如:如何添加或更改params到struts url標記?

 
<s:url action="getSomeData" id="baseDataUrl"> 
    <s:param name="someID" value="%{currentID}"/> 
</s:url> 
 

我可以再做<s:property value="baseDataUrl" />,它會吐出像/getSomeData.do?someID=5。 (我在這個例子中保留了params,但是你可以想象有更多的默認參數,例如,我正在使用的應用程序有3個參數,每個URL都是相同的,兩個參數是相同的。)

我希望能夠在定義該基本URL之後添加或更改參數。我夢想着兩種方法:

 
<s:url base="baseDataUrl" id="breadUrl"> 
    <s:param name="bread" value="%{'toast'}"/> 
</s:url> 
 

然後<s:property value="breadUrl" />會導致/getSomeData.do?someID=5 &麪包吐司=。另一種方法是用佔位符定義基礎URL:

 
<s:url action="getSomeData" id="baseDataUrl"> 
    <s:param name="someID" value="%{currentID}"/> 
    <s:param name="bread" /> 
    <s:param name="jelly" /> 
</s:url> 
 

然後填寫他們時,我問物業:

 
<s:param url="baseDataUrl" name="bread" value="%{'toast'}"/> 
<s:param url="baseDataUrl" name="jelly" value="%{selectedJam}"/> 
 

所以<s:property value="baseDataUrl" />會導致/getSomeData.do?someID=5 &麪包=吐司&果凍= 7。

s:url(http://struts.apache.org/2.0.14/docs/url.html)的文檔說「動態屬性允許:false」,所以我認爲我冒險進入自定義標籤領域。這感覺就像是一個常見的用例(用一些參數定義一個基本URL,然後添加或改變其中的一些),我不想重新發明輪子。搜索沒有任何結果,但也許我不是在尋找正確的東西。我願意接受各種各樣的建議!

回答

1

這裏是我能想到的

  1. 使用所謂的「delegatorAction」的行動,只寫所需要的額外參數幾個選項。您可以編寫一個Action/Handler,然後「推斷」其他參數(在本例中爲「someID」)。這可能是複雜的,你可能要改變這種代碼每次有改變你的URL處理邏輯
  2. 你可以寫自己的URL標記和說的和有像「基地」你建議的方式,這只是一個屬性評估的基礎屬性,並添加任何參數去它(你可以繼承該URL代碼)
  3. 最簡單的方法可能是首先聲明3個PARAMS作爲URL,然後使用標準S添加額外的參數:屬性標記(赫克我不能得到輸出xml代碼,即使有適當的格式不知道爲什麼,必須是因爲鉻)

在這種方法中,你只是在最後附加字符串。

+0

#3是我最終選擇的方法 - 我定義了幾個基準URL,然後s:property'd他們死亡。這不是最優雅的解決方案,但它將我的LOC降低了近60%!謝謝。 – jibberia

相關問題