要求是用户不管填了什么,都把JSP页面中用户填写的内容当成草稿保存下来。
由于数据库那里有很多限制,比如只能数字,或者不能为空,或者长度限制。
所以不能把数据存在原来一样的table里。
并且要求草稿可以有多个,可以在以后的查询里找到继续填写。现在考虑再建一个DB,(由于有很多种草稿,即很多种页面都需要草稿保存功能,所以没有在同一个库建很多类似的表,
而直接建个库)把table not null都去掉,都存文本。问题是,我看很多blog也有草稿功能,当然也许他们的要求是填正确了才能存草稿。
我想问,这种需求一般怎么实现?? 如果没有固定模式,大家也可以帮我想想办法。(其实我觉得这也许是个数据库的问题,但不知道放在哪个板块)ldh911有空看看吗??
由于数据库那里有很多限制,比如只能数字,或者不能为空,或者长度限制。
所以不能把数据存在原来一样的table里。
并且要求草稿可以有多个,可以在以后的查询里找到继续填写。现在考虑再建一个DB,(由于有很多种草稿,即很多种页面都需要草稿保存功能,所以没有在同一个库建很多类似的表,
而直接建个库)把table not null都去掉,都存文本。问题是,我看很多blog也有草稿功能,当然也许他们的要求是填正确了才能存草稿。
我想问,这种需求一般怎么实现?? 如果没有固定模式,大家也可以帮我想想办法。(其实我觉得这也许是个数据库的问题,但不知道放在哪个板块)ldh911有空看看吗??
解决方案 »
- jsp上远程播放录音,如何实现拖动?
- struts标签的普通按钮(不是提交的按钮)怎么写?
- JAVASCRIPT一个FOR循环问题,很初级很初级.........快
- 帮帮忙啊。。。。我的JSP有问题。。。。
- 用java通过飞信发短信....
- 请问如何得到调用存储过程后的记录集啊,数据库是MS-SQL2000
- 在weblogic portal中,将一个现成的portlet(.war文件)集成进来的问题
- 关于全文检索使用lucene并发性的问题
- Lomboz3.3+Tomcat5.5.25在Ubuntu下的奇怪问题?
- 急求!!!!请各位大侠帮帮忙,错误!
- ibatis 真分页 oracle
- struct2框架 select下拉列表如何实现可输入
但是这样就不方便检索了,所以放弃了。
当然到最后的话,你可以放个ajax到页面上,然后定时保存下也好嘛。哈哈
不错。 请问下你们处理为XML是用什么库的吗?
我知道java可以用xstream,你们是在客户端序列化成xml的吗? 怎么做的?
还有万一界面上多了几个输入框(设计变了),你们那样做是不是以前的草稿可能不能用了??
上面说到用xml保存,如果页面多了输入框,也没有问题吧,保存草稿是保存最后一次的数据并覆盖掉原来的。
服务器端,早期处理XML的是我自己写的一个库,因为嫌开源组件大多速度不够快、内存开销大;最近用的是 VTD-XML。客户端你是指浏览器吧?用JS直接将对象转为XML字符串,这个算法倒是很简单,而且也有JS包可以做。这个风险是永远存在的。不过对于XML而言,常规调整不会产生影响:
界面多录入控件:这无非就是XML反填的时候缺一个值而已,并不会形成任何危害;
界面少录入控件:这就是XML反填时,有一个元素没地方填了,控制好异常也不会形成危害。
真正怕的是:XML报文的结构调整,这个是颠覆性的。不过换个想法,你直接用数据库字段来存,只怕影响更大。所以对于存档数据,我们会考虑将其固化(样式+数据),可以理解为静态HTML了,不过我们推荐是PDF之类的。你可能会好奇我是怎么考虑控件如何跟XML配对,其实也挺简单的:
<input type="text" name="head.publicHead.info.name" readonly="readonly" datatype="string"/>它表示:
1、该控件值映射到XML的:\head\publicHead\info\name 节点
2、只读
3、数据类型是string
4、无需任何校验Anyway,只是一种做法,既不是业界推荐,更谈不上流行了。
2. 通过ajax实现自动保存。
<script language="javascript">
var saveReq = false;
//保存 草稿
function autoSave(){
var title=document.getElementById("title").value;
var content=document.getElementById("content").value;
if(title!="") { //当文章标题不为空时
var url = "saveDraft.jsp";
var param = "title="+title+"&content="+content;
//调用编写的Ajax请求方法
saveReq = httpRequest("post",url,true,callbackFunc_save,param);
}
}
//回调函数
function callbackFunc_save(){
if(saveReq.readyState == 4){
if(saveReq.status == 200){
document.getElementById("sysTip").innerHTML = saveReq.responseText;
}
}
}
var selectReq = false;
function selectArticle(){
var url = "getDraft.jsp";
var param = "nocache="+new Date().getTime();
selectReq = httpRequest("get",url,true,callbackFunc_select,param);
}
function callbackFunc_select(){
if(selectReq.readyState == 4){
if(selectReq.status == 200){
document.getElementById("draftBox").innerHTML = selectReq.responseText;
}
}
}var delay=1000*60*5; //定义延迟时间,这里为5分钟
timer=window.setInterval(autoSave,10000); //每隔5分钟保存一次草稿
timer=window.setInterval(selectArticle,delay); //每隔5分钟保存一次草稿</script>
不会有问题,多了输入框,无非是在草稿中找所映射XML节点找不到,那么该输入框就留空,并不会导致出错啊。
谢谢,我参考了很多例子。
弄了个用javascript序列化和反序列化form内容的例子。
http://goro.iteye.com/admin/blogs/1671322基本决定这样做了。 嘿嘿。要是再有问题,我发贴再问。
http://goro.iteye.com/blog/1671322