【问题标题】:JSP session problemJSP会话问题
【发布时间】:2011-09-15 01:41:30
【问题描述】:

我是编写 JSP 的新手。

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

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

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

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

在 JSP 中,我在会话中使用 getAttributes,并在动态创建表单的过程中更改选定的值。

我想知道是否有更简单的方法可以做到这一点,因为我必须创建很多字段才能工作。在这种情况下,我也没有使用数据bean。

既然动态创建字段是用java逻辑,难道真的不能用ajax吗?

您能否就我的设计质量给我建议?我是否忠于 MVC 设计模式?

【问题讨论】:

    标签: javascript jsp


    【解决方案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?

    【讨论】:

    • 非常感谢您的回答!我认为你为我提供了很好的洞察力。我想知道的一件事是,由于我目前正在将javascript用于onchange方法,该方法使用诸如document.location = servlet?parameter1=parameter1之类的代码,所以我没有提交表单而是重新创建表单?或者他们是一样的?如果我在 onchange 期间没有提交表单,这种方法是否可以保留选定的值?
    • 是的,如果您将选定的值作为重定向 URL 的请求参数包含在内,它将同样有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多