2012-10-29 242 views
0

基本問題
我遇到一個有點一邊寫我自己的自定義JSP標記問題的「包裝」春天MVC表單標籤包裝Spring MVC的選擇標記時。我已經成功包裝了其他標籤,但是已經取消了select和options標籤,這會引發IlleagalStateException。我調試了spring代碼,發現options標籤查找祖先選擇標籤。我正在用標籤文件做這件事,所以Spring選擇標籤實際上是在不同的標籤文件中。我想這就是爲什麼它沒有找到它。IlleagalStateException自定義標籤

所以問題是我能做些什麼來解決這個問題?

可能的解決方案
我試圖尋找解決方案,但所有我發現是具有相同問題的其他人,但沒有解決方案發布。我沒有使用spring標籤的思想編寫我自己的選擇和選項標籤,但我並不想複製它免費提供的綁定。我不介意更改爲使用Java類而不是標記文件,但我之前發現輸出不會被評估爲JSP,因此您無法輸出另一個JSP標記。因爲第一問我現在是什麼我想達到更清晰的問題

理由這樣做
已經想了一個星期。

  • 爲了簡化我的JSP的
  • 分解出公共代碼(如表格:輸入或正從春天翻譯後的錯誤:消息)所需的標記
  • 要封裝的外觀和感覺(CSS進了但經常需要更改標記)
  • 爲了能夠構建增強型組件,擴展彈簧標籤的功能性(例如,使多選作爲選項列表或顯示只讀輸入作爲文本標籤)

我很想聽聽人們的想法。 謝謝

回答

0

我已經想了現在不錯的一週,這是名單:

  • 放棄,直接使用Spring的標籤我的JSP的
  • 不要使用彈簧標籤,並在自己的標籤中複製它們的邏輯
  • 可能編寫一個擴展或使用彈簧標籤類的標籤類
  • 擴展我的標籤的範圍以包裝select和options標籤

鑑於想要做到這一點的原因(我現在已經在問題中進行了澄清),我決定選擇最後一個選項。我原本並不熱衷於這個,因爲我想我可能會得到數百個參數,但實際上並不算太壞。標記文件是專爲包裝常見的標記位而設計的,所以這就是它們的用途。我還包裝了自己的標籤,所以有一個picklist標籤輸出我的自定義選擇標籤,然後寫入需要初始化它的JS。

我覺得這是最好的可能的解決方案我已經遇到基於什麼我想實現的。這就是我要做的,但如果他們認爲自己有更好的東西,我仍然有興趣瞭解其他人的解決方案。

1

首先,我不知道你想要控制樣式意味着什麼。我認爲你可以傳入class和id屬性給Spring標籤,並且它們通過(? - 雖然我可能會對Grail標籤感到困惑,因爲我最近一直在編寫Grails應用程序)。編輯:你還可以通過引用外部元素來設計Spring生成的標籤。例如。用div包圍你的表單元素,然後設置表單元素,如:#myDiv input { color: red; }

從我的經驗(10多年的webapp開發),它不值得額外的努力嘗試和未來證明你的應用程序。當你選擇像Spring MVC這樣的框架時,你會得到很多免費的東西,你通常必須自己寫。這個免費的東西的成本是一定量的鎖定(如你所說)。當談到這個方面時,Spring是相當不錯的 - 你可以儘可能少地使用它,也可以使用它,如果將來需要它,它通常會非常簡單地進行工程設計。

所以我的意思是:「按原樣」使用Spring標籤。將來需要刪除Spring方面的可能性非常小。因此,如果/直到該情況出現,它纔有可能「推遲」。您可能已經花費了儘可能多的時間和代碼來設計您的未來防禦解決方案,因爲您已經花費在刪除Spring標籤上 - 它超過了它可能提供的任何好處。並添加到 - 編寫的代碼,你和/或其他人現在必須維護的代碼 - 與讓Spring開發人員維護代碼爲您服務。

最後,如果你真的不希望有這樣的鎖定,並希望在造型完全控制,然後手工編寫你的表單元素。

<select name="foo_select"> 
    <option value="">-- select a foo type --</option> 
    <c:forEach var="foo" items="${fooGroups}"> 
     <option value="${foo}">${foo}</option> 
    </c:forEach> 
</select> 
+0

也許你說得對。爲了解決造型,我也許可以用較少的混入TB樣式我自己的網站規則或辭職結核病類通過爲每個頁面上的每個組件。這使得改變CSS風格成爲主要的痛苦,因爲我現在已經高度結合了結核病。 –

+0

這個答案確實迫使我退後一步,重新思考我正在努力實現的目標。謝謝 –