2011-09-15 104 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