2010-06-01 40 views
11

我試圖製作一組封裝表單元素(標記和驗證)的自定義標記。從自定義JSP標記訪問請求對象

有給予方便地檢索的「OUT」對象的方法:

JspWriter out = getJspContext().getOut(); 

但我無法弄清楚如何獲得請求對象。我希望能夠直接訪問Tag類中提交的表單值,以便我可以驗證每個字段。

documentation相當稀疏,所以我想也許我可以使用JspContext對象以某種方式獲取請求屬性。但我不明白不同的範圍。

System.out.println(getJspContext().findAttribute("field1")); 

總是打印「null」。

Enumeration e = getJspContext().getAttributeNamesInScope(1); 

循環通過並打印出枚舉只是給了我不存在的類的列表:

javax.servlet.jsp.jspOut 
javax.servlet.jsp.jspPage 
javax.servlet.jsp.jspSession 
javax.servlet.jsp.jspApplication 
javax.servlet.jsp.jspPageContext 
javax.servlet.jsp.jspConfig 
javax.servlet.jsp.jspResponse 
javax.servlet.jsp.jspRequest 

因此,這甚至可能嗎?

如果沒有,任何人都可以指向一個標籤庫,處理表單顯示和驗證?我搜索了幾個小時的互聯網,似乎每一個都停止了,我無法下載它們。要麼這個或建議一個更好的選擇處理表格。

編輯:這些標籤擴展SimpleTagSupport類。

+0

你用你的標籤類擴展了哪一個類? – Fil 2010-06-01 22:27:31

+0

SimpleTagSupport – 2010-06-01 22:33:01

回答

13

如果您的類正在擴展TagSupport,則可以訪問受保護的pageContext變量。從那你可以檢索請求對象。

http://java.sun.com/webservices/docs/1.5/api/javax/servlet/jsp/tagext/TagSupport.html#pageContext

+1

有什麼辦法從擴展SimpleTagSupport的類來完成它? – 2010-06-01 22:29:42

+2

如果您需要訪問超過標籤的屬性,則應考慮擴展TagSupport。你有避免這種情況的原因嗎? 「JspContext充當PageContext類的基類,並且抽象所有不特定於servlet的信息,這允許簡單標記擴展在請求/響應Servlet的上下文之外使用。」 來自Sun:http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/jsp/JspContext.html – Fil 2010-06-01 22:35:56

+2

或者,您可以將JspContext強制轉換爲PageContext。在這裏描述,http://stackoverflow.com/questions/2098796/how-to-access-request-in-jsptags。 – Fil 2010-06-01 22:39:04