2012-01-03 49 views
1

我正在研究struts的fielderror標記,並想知道是否可以根據是否存在任何驗證錯誤來有條件地顯示頁面上的某些元素。我想要做這樣的事情(目前沒有做什麼,我希望它):Struts 2 - 根據驗證錯誤在頁面上顯示元素

<s:fielderror> 
    <a href="test.html">This is a test link</a> 
    <s:param>field1</s:param> 
    <s:param>field2</s:param> 
    <s:param>field2</s:param> 
</s:fielderror> 

我想錨標記顯示僅當該param標籤所引用的領域之一是無效的。換句話說,如果在此fielderror塊中某些內容無效,我想顯示一些HTML。上面編碼的方式始終顯示錨標籤。

我想我當然可以用jQuery做到這一點,但我想知道是否有一種方法可以在Struts中本地執行此操作,也許我忽略了這一點。我試過看標籤和標題屬性,但似乎沒有任何工作。

在此先感謝!

〜Ĵ

回答

3

沒有什麼外的開箱,至少不會像你希望的方式。個人而言,我發現你的構造非常不直觀:它不會執行/渲染就像它讀取。

有幾個選擇:「手動」,創建一個標籤來完成它,或者在視圖之外進行。所有依靠使用ValidationAware.getFieldErrors()來抓住地圖,並做一些最小的邏輯。

手動方法將使用<s:if>檢查每個字段是否存在fieldErrors['fieldName']。在一個簡單的基於JSP定製標記包裹起來會產生類似:

<if:fieldErrors for='field1, field2, field3'> 
    <a ...> 
</if:fieldErrors> 

IMO做的大部分在Java中的工作是更清潔,更容易測試。這可能意味着在動作(或實用程序)中完成所有工作,並只向視圖顯示單個標誌,或使用基於JSP的精簡標記調用實用程序。無論哪種方式,在容器外進行測試都比較容易,並刪除不適當的查看邏輯。

+0

+1服務器端邏輯處理比污染視圖更合適。 – 2012-01-04 01:57:30

+0

我很抱歉,我不完全明白你的建議。我真的不知道如何使用自定義標籤,不幸的是,我不知道如何使用getFieldErrors()方法。你提到使用'',但你的例子使用''。你能詳細解釋一下這個工作原理嗎?或者有可能有一些文件,我可以看看更好地理解這一點? – jacosta 2012-01-05 20:28:38

+0

@jacosta s:if標籤用於手動檢查字段錯誤映射。查看API文檔瞭解如何使用方法。 if:fieldErrors是一個假想的自定義標記,它會包含功能以保留主線JSP以外的大量邏輯。在服務器端執行這些操作並僅暴露布爾值會使大部分努力消失。 – 2012-01-05 21:02:23