JSP会话问题

时间:2011-09-15 01:41:31

标签: javascript jsp

我是编写JSP的新手。

在我的JSP中,我动态创建了一个带有选择框的表单 (即这些字段不是html)

在其中一个选择框中,我实现了一个onchange方法,该方法将值作为参数传递并重新显示表单。当表单重新显示我传递的参数时,使用外部XML文件根据参数的值设置另一个选择框的值。

一个问题是,在onchange方法重新发送和重新加载当前页面之后,其他字段(大约10个字段)的选定值将丢失。

目前,我使用Session使用以下方法来解决此问题 在我的JSP中;在onchange方法中,我使用javascript加载选定的值并将它们作为参数传递给GET请求中的servlet。在servlet中,我在会话中接收参数和设置属性。

在JSP中,我在会话中使用getAttributes并在动态创建表单期间更改所选值。

我想知道是否有更简单的方法来执行此操作,因为我必须创建大量字段才能使其正常工作。在这种情况下,我也没有使用数据库。

由于字段的动态创建使用的是java逻辑,因此无法使用ajax吗?

您能告诉我设计质量吗?我是否坚持MVC设计模式?

1 个答案:

答案 0 :(得分:1)

如果我没有错,你的整个问题基本上都是 boils (低估)到以下内容:

  

我有一个带有一堆下拉菜单的表单。我在交换下拉菜单期间提交了一份表格。提交后如何保留所有其他投影的选定值?

是?

好的,只要下拉选项的值与提交的请求参数值匹配,就设置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?