2011-10-03 121 views
1

我有一個場景,必須儘可能簡單地填寫表單。表格中填寫的值最初由用戶詢問並存儲在數據庫中。是否有可能在servlets/jsp和javascript函數之間共享會話變量?

之後,當用戶點擊一個按鈕時,會調用一個javascript函數,用jsp/servlet獲取的值自動填充表單中的所有字段。

我想在servlet/jsp的幫助下從數據庫中檢索值(即要填入表單中的值)...現在應該有一些方法讓javascript函數填充此值(即是通過servlet/jsp獲得的)形式...

是否可以在jsp/servlets和javascript之間進行數據/變量共享? javascript函數將成爲jsp的一部分(它檢索應該填入表單中的值)。

回答

1

如果請求是同步發送的(例如表單提交按鈕),那麼你不一定需要JS來完成這項工作。只需讓JSP/EL立即將它們打印爲基於由servlet預先填充的數據的輸入值。例如,假設${user}是由小服務程序製備的典型的Javabean:

<input type="text" name="name" value="${fn:escapeXml(user.name)}" /> 
<input type="text" name="city" value="${fn:escapeXml(user.city)}" /> 
<input type="text" name="country" value="${fn:escapeXml(user.country)}" /> 

(該fn:escapeXml()只是爲了防止跨站腳本攻擊)

如果請求被異步地發送(使用AJAX例如),那麼你只需要讓該servlet以JS可以輕鬆解析的格式返回數據,例如JSON。

{ 
    "username": "Bauke Scholtz", 
    "city": "Willemstad", 
    "country": "Curaçao" 
} 

然後可以使用作爲Ajax響應回調函數如下(其中user是獲得JSON對象):

document.getElementById("name").value = user.name; 
document.getElementById("city").value = user.city; 
document.getElementById("country").value = user.country; 

jQuery讓這樣的事情要容易得多。另請參閱How to use Servlets and Ajax?

1

瀏覽器中的Javascript客戶端無法直接訪問服務器上的環境(並且不應該想象如果所有頁面在您決定使用不同服務器解決方案的那一天都打破了這種情況會怎麼樣)。你基本上有兩種選擇:

  • 包括你永遠都需要你提供給客戶端的網頁上的所有數據(可能是HTML表單的dinamically產生,以滿足您的需求,等等等等)

  • 通過XMLHttpRequest(aka AJAX)手動請求額外的信息。如果您只能確定在頁面加載後需要使用哪些數據,那麼這是唯一的方法。