100求助!怎么让多个页面上表单的数据一起存入数据库?

lookhang 2010-09-26 08:48:37
我们现在需要做一个关于试验的系统,有很多表单需要用户填,又不能放在一个页面,并且如果用户没有点击最终的“完成”按钮,数据就不能写入数据,这样就遇到一种情况,如果用户每填完一个页面的数据就保存到数据库的话,那用户中途终止的话,这些已填的数据就成了垃圾数据!

大家遇到这种情况都怎样做的啊?
...全文
388 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
UPC_思念 2010-09-29
  • 打赏
  • 举报
回复
1.好像可以用ActionForm来实现,只不过这个ActionForm要定义很多变量,ActionForm不仅能分装页面上的数据,而且可以将该数据带到下个action中,也就是有能保存数据的效果,楼主可以试试。如果实在不行得话就用隐藏域吧,一步一步的将数据保存下去,最后提交。
2.可以考虑用单例模式来实现
定义一个类,定义一个类型为HashMap静态的成员变量,将每一步的信息保存到map中,最后在从map取数据提交到数据库中,这个跟Java实现缓存的原理有点类似,由于map是静态的变量,能被程序所共享。
LeeJah163 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cqumomo 的回复:]
引用 3 楼 leejah163 的回复:
可以把前一个页面的表单数据传递到下一个页面的地址栏里,依次传下去。
可以把前一个页面的表单数据传递到下一个页面的隐藏域里,有同样效果。


这个是不可行的。因为用户会回退的。如果用户回退了,并且修改了之前填写的内容呢?
[/Quote]

会退后,修改完了,还是将把前一个页面的表单数据传递到下一个页面的地址栏里货隐藏域里的啊!
不要用session,开销太大了,15楼和16楼说的是对的,跟我一个意思。
f0501412727 2010-09-28
  • 打赏
  • 举报
回复
不支持用session实现,这样性能太差了
yaoweijq 2010-09-28
  • 打赏
  • 举报
回复
spring webflow
个人感觉解决这类问题比较容易
plutowang 2010-09-28
  • 打赏
  • 举报
回复
用request一页一页的传吧,访问量大多的话session太耗资源了。
提供一种思路给LZ参考
首先把每个页面的数据写个实体进行封装。如果用的struts直接给每个页面配置一个ActionForm就能很好的封装了。没用就自己写实体。
然后写一个实体把每个页面实体封装进去。
页面之间直接传递这个实体,并将每个页面的数据填充到对应的实体里面,最后在后台取出请求中的实体进行操作。
这样做的优势:
1.可以直接根据页面实体判断哪个页面的数据没有填充完整,给用户跳转到那个页面补充完整的机会。
2.可根据实体的数据完整性判断是否为垃圾数据。来决定插入与否。
3.只传一个实体减少了一定的代码量(不用繁琐的request.setAttribute())。
4.降低了由于数据过多,漏传的可能性。

czmchen 2010-09-28
  • 打赏
  • 举报
回复
存作用域就行了,或者直接放到一个ActionForm里面
niu90 2010-09-28
  • 打赏
  • 举报
回复
如果有用struts框架,用一个formbean就可以了,如果没用框架,请参考2楼答案
dada_fangfang 2010-09-28
  • 打赏
  • 举报
回复
编程没有完美的结果,有时候需要平衡和取舍
你要说session不好,不好控制,很有道理
你要说request传来传去,页面一多,传哪了也不知道,导致数据丢失,而且需要编写大量的代码,也有道理
你一定要说哪个好?你觉得呢?你的项目经理觉得呢?

个人感觉,SuperCodingMan的想法和我差不多,典型的购物车,既然是经典,总有他的道理。
xianaofei 2010-09-28
  • 打赏
  • 举报
回复
一个页面采用多个选项卡试试啊
PowerKinging 2010-09-27
  • 打赏
  • 举报
回复
不能session,要明白做的是注册,有很多要填的,每个都session?那万一同事很多人来注册,系统崩溃都有可能.不说了,lz自己看吧,根据自己的情况去选择.没有最适合的,只有更适合的.
pengzhistar 2010-09-27
  • 打赏
  • 举报
回复
记住一个事,能放在客户端的东西尽量放客户端!
pengzhistar 2010-09-27
  • 打赏
  • 举报
回复
1。不推荐用session,懒得去控制!如果是访问量大,也是一个开销。
2。session你打算怎么设置时间?比方说一个用户填写了一半后,然后刚好有事离开一下,岂不是要重新填?交互性不好!

推荐把参数传回去,用hidden!
wei_wxx 2010-09-27
  • 打赏
  • 举报
回复
不用session。你可以做个Map。把相对应的值一步一步传过去。然后到最后再取出来就对了。
qysnowqy 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 supercodingman 的回复:]

现在的网上简历很多都是放在同一个页面的,你可以用ajax把部分的页面隐藏起来,当用户点击展开的时候再展开,这样看起来就美观了。如果实在是要用多个页面的话,那就得把数据先储存在session里面,然后再翻页,填完一页更新一次session。(购物车的原理是这样的)
[/Quote]
还是这种思想比较好,js控制多好=。=
dada_fangfang 2010-09-27
  • 打赏
  • 举报
回复
提交完成后 记得清楚这个session
dada_fangfang 2010-09-27
  • 打赏
  • 举报
回复
不能 放在request
因为有可能会丢失,而且每次传递都要写,你们不累吗?
放在session好了,虽然我一般很少用session,但是这样的需求不放在session,没天理了。
放session 不管是map 还是list 随便你放。数据封装应该不难。
PowerKinging 2010-09-27
  • 打赏
  • 举报
回复
在上个页面获得后,用一个hidden隐藏域,放入隐藏域的value中,直接提交表单后,下页用request获取.很方便,不建议用session.ajax操作起来不好操作.重要是理清步骤
howardhewang 2010-09-27
  • 打赏
  • 举报
回复
放在session里吧,很经典的购物车原理。
qqzhuyuehe 2010-09-27
  • 打赏
  • 举报
回复
每次点击下一步的时候,将页面数据存放在session中,点上一步时从session中取出值填充页面,最后完成的时候,一次性存数据库,取消就清空每个session中的值。
cqumomo 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 leejah163 的回复:]
可以把前一个页面的表单数据传递到下一个页面的地址栏里,依次传下去。
可以把前一个页面的表单数据传递到下一个页面的隐藏域里,有同样效果。
[/Quote]

这个是不可行的。因为用户会回退的。如果用户回退了,并且修改了之前填写的内容呢?
加载更多回复(5)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧