2012-09-13 58 views
2

我想做什麼:從Servlet的發送信息,以JSP

我有很多領域(暱稱,電子郵件,名字,姓氏等)的形式,但用戶必須填寫尼克和首先發送電子郵件是爲了能夠填寫其他字段(這是因爲我們希望檢查其他客戶沒有使用暱稱和郵件,然後才能介紹他的其他信息(名稱,姓氏等) )。 因此,用戶引入了Nick和Email,然後他必須按下一個名爲「Validate」的按鈕,如果這些值可用(成功驗證),那麼其餘的字段被啓用並且用戶可以繼續填寫表單,否則字段保持禁用狀態並向用戶顯示錯誤。

表單將位於一個JSP中,它將被提交給一個Servlet,一旦在servlet中我必須驗證表單中的信息(我有一個包含在此servlet中的.JAR文件,驗證包含在從庫中調用函數時,該函數返回一個布爾值),然後我必須返回到相同的JSP表示驗證函數結果的布爾值。 現在在JSP中,我必須啓用(或不根據布爾值的值)其餘的TextFields。

我不確定這是否正確,但我試圖用按鈕提交,同時運行一個javascript(onclick),它將使用此布爾值,該servlet在創建後返回給JSP驗證。 javascript包含一個評估布爾值的IF語句,如果它是true,那麼它將啓用JSP上的所有字段。

問題至今:

我能夠從JSP發送尼克和電子郵件到Servlet和使值的驗證,現在我有布爾,但我對如何不知道將它從Servlet發送到同一個JSP,並在用於提交信息的同一個按鈕的onclick事件中使用它。我甚至不知道是否有可能這樣做...

如果有人能幫我一個忙,我很感激,我是Java編程的新手,所以如果可能,我會很感激簡單的解釋。 此外,如果有更好的方式做我想做的事情,請分享一下,如果有任何疑問,我會盡力更好地解釋它。

回答

0

我認爲AJAX更適合您的應用程序,它不需要提交整個表單,您可以發送驗證標誌爲普通responseText或格式良好的responseXML。你也可以使用很多很好的javascript庫,例如jQuery,它可以幫助你快速簡單地發送AJAX請求。

+0

感謝您的回答。 無論如何,我不想使用AJAX,因爲我對它一無所知,並且我有時間限制來開發此應用程序。因此我不知道是否專門花時間從零開始研究AJAX是個好主意。 – Simpson

+0

好的,那麼對於您的情況,您仍然可能會轉回到同一頁面(URL)並在URL中附加驗證標誌(Y/N),例如:「?validatedOK = Y」。 –

1

正如Roy提到的AJAX最適合您的問題。您可以使用DWR! ,它使正常的java類作爲AJAX服務可用,只需調用它們的方法並獲得結果即可。太簡單。

2

根本不需要JavaScript。

在你的servlet,你可以驗證結果存儲到請求上下文:

req.setAttribute('checkResult', checkResult); 

其中reqHttpServletRequest型和checkResultBoolean

然後你可以轉發給你的JSP:

RequestDispatcher dispatcher = req.getRequestDispatcher("/your.jsp"); 
dispatcher.forward(req, resp); 

在JSP中你可以設置你的表單元素,因爲只有這取決於您放入請求上下文屬性checkResult閱讀:

<textarea name="text" cols="50" rows="10" 
    <%= request.getAttribute("checkResult") != null && request.getAttribute("checkResult") ? "" : "readonly" %> 
>...</textarea> 

因此,如果檢查無效,那麼<textarea>元素將包含readonly屬性。否則readonly不存在。

+0

您好,感謝您的建議,這似乎是一個很好的解決方案,但我遇到了以下問題: <%= request.getAttribute(「checkResult」)!= null && request.getAttribute(「checkResult」)? 「」:「只讀」%> 我不明白,「?」是什麼意思?和「:」呢? 我得到該行中的錯誤:「運算符&&是未定義的參數類型(s)布爾值,對象」 – Simpson

+0

對不起,你是對的。 getAttribute()返回Object,所以你必須將它轉換爲布爾值。之前的部分?必須是:request.getAttribute(「checkResult」)!= null &&((Boolean)request.getAttribute(「checkResult」))。這是三元運算符的條件(請參閱http://en.wikipedia.org/wiki/%3F:#Java)。如果在請求上下文中設置了屬性「checkResult」並且布爾值爲true,那麼它的計算結果爲true。在?之後有兩個值。如果條件爲真,冒號前的第一個是三元表達式的值。 – vanje

+0

如果條件爲假,則三元表達式計算爲冒號後的值。所以整個<%= ... %>部分的結果是空字符串,如果checkResult屬性設置爲true。如果checkResult屬性不存在於請求上下文中或設置爲false,則字符串爲「只讀」。 – vanje