2011-09-15 25 views
1

我是編寫JSP的新手。JSP會話問題

以我JSP我已動態創建與選擇框 一個形式(即這些字段不在HTML)

在selectboxes之一,我實現該傳遞值作爲參數,並重新一個平變化方法 - 顯示錶單。當表單重新顯示我傳遞的參數時,使用外部XML文件根據參數的值設置另一個選擇框的值。

一個問題是,當onchange方法當前頁面被重新發送和重新加載後,其他字段(大約10個字段)的選定值將丟失。

目前我使用Session使用以下方法來解決這個問題 在我的JSP中;在onchange方法中,我使用javascript加載選定的值並將它們作爲參數傳遞給GET請求中的servlet。在servlet中,我接收會話中的參數和設置屬性。

在JSP中,我在會話中使用getAttributes並在動態創建表單期間更改所選值。

我不知道是否有一個更簡單的方法來做到這一點,因爲我必須創建大量的字段才能工作。在這種情況下,我也沒有使用數據庫。

由於字段的動態創建使用java邏輯,ajax無法使用是真的嗎?

您能否就我的設計質量給我建議?我是否忠於MVC設計模式?

回答

1

如果我沒看錯,你的整個問題基本上(輕描淡寫)到以下幾點:

我有一堆下拉菜單的形式。我在提交下拉列表時提交表單。如何在提交後保留所有其他投影的選定值?

是嗎?

好的,只要設置selected屬性,只要下拉選項的值匹配提交的請求參數值。下面的例子假設您已經一個Map<String, String>${fooOptions}

<select name="foo"> 
    <c:forEach items="${fooOptions}" var="fooOption"> 
    <option value="${fooOption.key}" ${fooOption.key == param.foo ? 'selected' : ''}>${fooOption.value}</option> 
    </c:forEach> 
</select> 

你看到了嗎?當表單被提交時,名稱爲"foo"的當前選定下拉選項將作爲請求參數發送,並在服務器端作爲請求參數${param.foo}提供。在動態生成選項時,您只需檢查選項的值是否等於請求參數值,如果是,則只需設置selected屬性。

請注意,這與會話等無關。他們通常會針對當前訪問者提供不同的用途,例如登錄,偏好,購物車等。不要用它來存儲表單值。只有當您在同一個會話中打開多個瀏覽器窗口/標籤時,它纔會發生衝突。

JavaScript只有在你想要做ajax魔術時纔有用。但我想這對你來說只是另一個陡峭的學習曲線。也許是爲了以後。無論如何,你可以在這個答案中找到一些啓示的例子:How to use Servlets and Ajax?

+0

非常感謝你的回答! 我想你給我提供了很好的見解。 我想知道的一件事是,因爲我目前使用JavaScript的onchange方法使用像document.location = servlet?parameter1 = parameter1, 代碼,所以我不是提交表單,而是重新創建表單?或者他們是一樣的? 如果我不在onchange期間提交表單,這種方法是否可以保留選定的值? – vincentlcy

+0

是的,如果您將選定的值作爲重定向URL的請求參數包含在內,它將同樣有效。 – BalusC