gpt4 book ai didi

java session bean - 重新加载数据?

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:05 25 4
gpt4 key购买 nike

这就是我想做的。这看起来很简单,但我无法让它发挥作用。 JSP1 - 用户填写表单,提交给 JSP2。 JSP2 在 Bean 中填充表单值并显示数据,并为用户提供返回和修改 (history.back()) 或提交到 Servlet 的选项。我提出了三个不同的选项,每个选项都有问题。

选项 1:JSP1 - 标准 html 表单,提交到 JSP2

<form name="testform" method="post" action="jsp2.jsp">
...
City: <input name="currentCity" type="text" />

JSP2 -

<jsp:useBean id="workorder" type="com.mycompany.app.WorkorderBean" class="com.mycompany.app.WorkorderBean" scope="request">
<jsp:setProperty name="workorder" property="*" />
</jsp:useBean>
...
currentCity: ${workorder.currentCity}

问题 - 当 JSP2 提交到 Controller 时,我调用 WorkorderBean workorder = (WorkorderBean) request.getAttribute("workorder"); 它返回 null。因此“scope=request”不会从 JSP 到 servlet。

选项 2:相同的场景,但在 JSP2 上使用“scope=session”。
问题:当用户选择返回JSP1并修改数据,然后重新提交到JSP2时,JSP2不使用新值,因为它已经将该bean作为 session bean。
问题:当我从JSP1提交时,有没有办法清除 session bean?我认为我无法用 Javascript 做到这一点。

选项 3:让 JSP1 提交到 Servlet,Servlet 格式化 session Bean 并将其发送到 JSP2。
问题:当用户选择从 JSP2 返回到 JSP1 进行更改时,表单中的所有数据都会丢失。

我怎样才能做到这一点?

最佳答案

最好的办法是在第二页上设置一个包含隐藏字段的表单。

然后在第一个表单上,您应该让它查看输入数据的请求。

所以,你最终会得到这样的结果:

GET /jsp1

显示初始形式,空。然后它 POST 到 JSP2

POST /jsp2
fname=Frank&lname=Jones&city=Atlanta

jsp2 然后重定向回其自身:

GET /jsp2?fname=Frank&lname=Jones&city=Atlanta

它会显示这些值。

如果用户点击“返回”,他们就会看到自己的原始作品。如果您向他们提供“返回”链接,并且这是一个真正的链接,那么它应该像 JSP2,只不过是 JSP1:

GET /jsp1?fname=Frank&lname=Jones&city=Atlanta

如果他们选择继续,那么您可以 POST 到 Servlet:

POST /servlet
fname=Frank&lname=Jones&city=Atlanta

在 JSP2 上你有一个隐藏的表单:

<form action="/servlet" method="POST">
<input type="hidden" name="fname" value="Frank"/>
...
<input type="submit" ... />
</form>

完成后,Servlet 将重定向到它想要显示的任何 JSP。

从根本上来说,您只希望浏览器显示它获取的内容,而不是 POST 的结果。如果您曾经见过,当您点击后退按钮时,您会看到“您要重新提交此查询吗”对话框,那是因为上一页的结果来自 POST,而不是 GET。

您在请求中使用参数来帮助推进状态。这会将信息排除在您的 session 之外,并让“刷新”按钮等功能对用户正常工作。

关于java session bean - 重新加载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3945908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com