JSP会话问题

JSP session problem

本文关键字:问题 会话 JSP      更新时间:2023-09-26

我是一个写jsp的新手。

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

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

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

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

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

我想知道是否有一种更简单的方法来做到这一点,因为我必须创建很多字段才能工作。在这个例子中,我也没有使用数据库。

由于动态创建字段是使用java逻辑,是真的,ajax不能使用吗?

你能对我设计的质量提出建议吗?我是否忠实于MVC设计模式?

如果我没弄错的话,你的整个问题基本上可以归结为(轻描淡写)如下:

我有一个有一堆下拉列表的表单。我在提交一个下拉菜单的变化期间的形式。提交后如何保留所有其他下拉框的选定值?

是吗?

OK,只要下拉选项的值与提交的请求参数值匹配,就设置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魔术的时候才有用。但我想这对你来说只是另一个陡峭的学习曲线。也许以后再说。无论如何,您都可以在这个回答中找到一些入门示例:如何使用servlet和Ajax?