首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java会话bean -重新加载数据?

问java会话bean -重新加载数据?
EN

Stack Overflow用户
提问于 2010-10-15 20:32:18
回答 2查看 4.2K关注 0票数 1

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

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

代码语言:javascript
复制
<form name="testform" method="post" action="jsp2.jsp">
...
City: <input name="currentCity" type="text" />

JSP2 -

代码语言:javascript
复制
<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}

Problem -when JSP2提交给控制器,我称之为WorkorderBean workorder = (WorkorderBean) request.getAttribute("workorder");,它返回null。因此,“scope=request”并不能从JSP转换到servlet。

选项2:相同的场景,但在JSP2上使用'scope=session‘。

Problem:当用户选择返回JSP1并修改数据,然后重新提交给JSP2时,JSP2不会使用新值,因为它已经将bean作为会话bean。

问题:在从JSP1提交时,有什么方法可以清除会话bean吗?我不认为我能用Javascript做到这一点。

选项3:让JSP1提交到Servlet,它格式化会话bean并发送到JSP2。

Problem:当用户选择从JSP2返回到JSP1进行更改时,所有数据都会在表单中丢失。

我怎么才能把这事做好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-15 20:50:02

备选案文1的可能解决办法:

在JSP2中,将请求参数放在隐藏的表单字段中,以便将它们提交给servlet。在servlet中,您必须手动读取请求参数。但是您不需要会话,您可以从JSP2返回到JSP1,更改一些值,再次提交给JSP2。然后,JSP2上的提交将更改后的值传递给servlet。

更新:

在第二个选项中:在重新提交后bean属性保持不变的原因是,您将jsp:setProperty标记放置在jsp:useBean中。在这个星座中,jsp:setProperty只在bean创建时被调用。在JSP2的第二个调用期间,会话范围中已经存在bean workorder,并且没有发生jsp:setProperty调用。

如果将jsp:setProperty标记放置在jsp:useBean之外,则可以更改该行为。

代码语言:javascript
复制
<jsp:useBean id="workorder" type="com.mycompany.app.WorkorderBean"
   class="com.mycompany.app.WorkorderBean" scope="session" />
<jsp:setProperty name="workorder" property="*" />  

然后,jsp:setProperty将在每个JSP2调用时被调用,并用请求参数覆盖bean属性。

票数 0
EN

Stack Overflow用户

发布于 2010-10-15 20:57:59

最好的做法是在第二页上有一个带有隐藏字段的表单。

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

所以,你的结局是:

代码语言:javascript
复制
GET /jsp1

显示初始形式,空。然后将其发布到JSP2

代码语言:javascript
复制
POST /jsp2
fname=Frank&lname=Jones&city=Atlanta

然后,jsp2重定向回它自己:

代码语言:javascript
复制
GET /jsp2?fname=Frank&lname=Jones&city=Atlanta

它会显示这些值。

如果用户回击,那么他们就会看到他们的原始作品。如果您为他们提供了一个“回溯”链接,并且它是一个真正的链接,那么它应该类似于JSP2,只是它是JSP1:

代码语言:javascript
复制
GET /jsp1?fname=Frank&lname=Jones&city=Atlanta

如果他们选择继续,那么您将发布到Servlet:

代码语言:javascript
复制
POST /servlet
fname=Frank&lname=Jones&city=Atlanta

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

代码语言:javascript
复制
<form action="/servlet" method="POST">
    <input type="hidden" name="fname" value="Frank"/>
    ...
    <input type="submit" ... />
</form>

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

从根本上说,您只想让浏览器显示它得到的东西,而不是文章的结果。如果您在单击“后退”按钮时看到该对话框“您想要重新提交此查询吗”,那是因为上一页的结果来自一个帖子,而不是GET。

在请求中使用参数帮助将状态向前推进。这样可以使会话中的信息远离,并让“刷新”按钮为用户正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3945908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档