日期:2014-05-17  浏览次数:20939 次

Web上临时保存草稿功能,数据库这块一般怎么实现的?
要求是用户不管填了什么,都把JSP页面中用户填写的内容当成草稿保存下来。
由于数据库那里有很多限制,比如只能数字,或者不能为空,或者长度限制。
所以不能把数据存在原来一样的table里。  
并且要求草稿可以有多个,可以在以后的查询里找到继续填写。

现在考虑再建一个DB,(由于有很多种草稿,即很多种页面都需要草稿保存功能,所以没有在同一个库建很多类似的表,
而直接建个库)把table not null都去掉,都存文本。

问题是,我看很多blog也有草稿功能,当然也许他们的要求是填正确了才能存草稿。
我想问,这种需求一般怎么实现?? 如果没有固定模式,大家也可以帮我想想办法。

(其实我觉得这也许是个数据库的问题,但不知道放在哪个板块。。。)

ldh911有空看看吗??

------解决方案--------------------
我遇到的都是一两条草稿数据,就是直接要求填写正确的数据后才能存草稿,not null的栏位一定要填写才能存
------解决方案--------------------
很有意思的问题。

我们也有存草稿的问题,而且也应该是随时随地;而且是复杂表单(超级复杂),但是一般没有RichText。

不过我们的做法不见得通用,因为我们把任何表单数据都处理为XML结构,提交或暂存(草稿)时都是先将页面数据封装为XML数据结构(或者理解为字符串也行),然后再将整个字符串以Ajax方式POST给服务器端。

再次查询出来的时候,界面也是用Ajax向服务器请求XML数据报文,然后服务器从数据库中直接把XML查询出来,界面再将XML映射回各控件。

我们的复杂表单会有20张以上主副表单组成,近2000个单元格需要填写,且表格之间存在逻辑自动计算和对照校验关系,所以不太好切分成N个页面去填写(用户要经常在表单之间切换),此外必然需要随时能暂存。

供参考~~~
------解决方案--------------------
如果用户没有值的话那你就给他赋予默认值不就好了呢?然后草稿其实就是一个状态嘛。比如0是未审核,1是审核,2是草稿之类的状态,
当然到最后的话,你可以放个ajax到页面上,然后定时保存下也好嘛。哈哈
------解决方案--------------------
觉得一般还是用文件的形式保存,不直接存在数据库中。
上面说到用xml保存,如果页面多了输入框,也没有问题吧,保存草稿是保存最后一次的数据并覆盖掉原来的。
------解决方案--------------------
探讨
不错。 请问下你们处理为XML是用什么库的吗?
我知道java可以用xstream,你们是在客户端序列化成xml的吗? 怎么做的?

------解决方案--------------------
1. 建一张表,字段为标题,内容,创建时间。
2. 通过ajax实现自动保存。
Java code
        
<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>

------解决方案--------------------
探讨

很有意思的问题。

我们也有存草稿的问题,而且也应该是随时随地;而且是复杂表单(超级复杂),但是一般没有RichText。

不过我们的做法不见得通用,因为我们把任何表单数据都处理为XML结构,提交或暂存(草稿)时都是先将页面数据封装为XML数据结构(或者理解为字符串也行),然后再将整个字符串以Ajax方式POST给服务器端。

再次查询出来的时候,界面也是用Ajax向服务器请求XM……

------解决方案--------------------
探讨
我指多了输入框后,不是再次保存,而是读原来的草稿时会不会有问题。

------解决方案--------------------
标记,日后肯定用的着,谢楼主