?
?
jsp部分代码
<tr> <th style="height: 20px;">案例正文<em>(必填)</em> </th> <td>最多填写2000字</td> </tr> <tr> <td colspan="2"><textarea class="w660 h100 mb10" id="caseText" name="caseText" onkeydown="if(this.value.length >2000) this.value=this.value.substr(0,2000);"> <c:out value="${cases.caseText}" escapeXml="true"></c:out> </textarea> </td> </tr> 。。。。。。 <script type="text/javascript" src="<spring:url value="/static/js/base.js" htmlEscape="true" />"></script> <script type="text/javascript" src="<spring:url value="/static/js/case.js" htmlEscape="true" /> ?aa=<%=System.currentTimeMillis()%>"></script> <script type="text/javascript" src="<spring:url value="/static/editor/ckeditor.js"></spring:url>"></script> <script type="text/javascript" src="<spring:url value="/static/editor/config_front.js"></spring:url>"></script> <script type="text/javascript"> var editor = CKEDITOR.replace('caseText', { customConfig : 'config_front.js' }); </script>
?case.js
function save() { /* 必检字段 */ var LastName = $("#LastName").val();// 客户姓氏 var title = $("#title").val();// 案例标题 var age = $("#age").val(); // 客户年龄 var occupation = $("#occupation").val();// 客户身份 var Income = $("#Income").val();// 月均收入 var AnnualPremium = $("#AnnualPremium").val();// 年缴保费 var CustomerDemand = $("#CustomerDemand").val();// 客户需求 var caseText = editor.document.getBody().getHtml(); // var caseText = $("#caseText").val();// 案例正文 var InsuranceCompany = $("#InsuranceCompany").val(); // 保险公司 var InsuranceProducts = $("#InsuranceProducts").val(); // 保险产品 var appellation = $("#appellation").val(); // 称谓 var sex = $("#sex").val(); // 性别 var id = $("#id").val(); // id // 判断空 if ($.trim(title) == '') { alert('案例标题'); return false; } if ($.trim(LastName) == '') { alert('请输入姓氏'); return false; } if ($.trim(age) == '') { alert('请选择年龄'); return false; } if ($.trim(occupation) == '') { alert('请填写客户身份'); return false; } if ($.trim(Income) == '') { alert('请填写月均收入'); return false; } if ($.trim(AnnualPremium) == '') { alert('请填写年缴保费'); return false; } if ($.trim(CustomerDemand) == '') { alert('请填写客户需求'); return false; } if (CustomerDemand.length > 200) { alert("客户需求字数不能大于200字"); return; } if ($.trim(editor.document.getBody().getText()) == '') { alert('请填写案例正文'); return false; } if (caseText.length > 2000) { alert("案例正文字数不能大于2000字"); return; } if ($.trim(InsuranceCompany) == 0) { alert('请填写保险公司'); return false; } if ($.trim(InsuranceProducts) == '') { alert('请填写保险产品'); return false; } // 判断格式 if (!nameCheck('title')) { alert('请填写正确格式的标题!'); return false; } if (!nameCheck('LastName')) { alert('请正确输入姓氏'); return false; } if (!nameCheck('occupation')) { alert('请填写客户身份'); return false; } if (!numCheck('Income')) { alert('请填写月均收入'); return false; } if (!numCheck('AnnualPremium')) { alert('请填写年缴保费'); return false; } if (!numCheck("Income")) { alert('请填写月均收入!'); return false; } // $('#myForm').submit();//验证通过,提交到action // var content = $("#description").val();// 日程内容 // var circulateFlg = $("#circulateFlg").val();// 重复flg // var LastName = $("#LastName").val();// 客户姓氏 // var title = $("#title").val();// 案例标题 // var age = $("#age").val(); // 客户年龄 // var occupation = $("#occupation").val();// 客户身份 // var Income = $("#Income").val();// 月均收入 // var AnnualPremium = $("#AnnualPremium").val();// 年缴保费 // var CustomerDemand = $("#CustomerDemand").val();// 客户需求 // var caseText = $("#caseText").val();// 案例正文 // var InsuranceCompany = $("#InsuranceCompany").val(); // 保险公司 // var InsuranceProducts = $("InsuranceProducts").val(); // 保险产品 /* * var submitValue = "LastName=" + LastName + "&title=" + title + "&age=" + * age + "&occupation=" + occupation + "&Income=" + Income + * "&AnnualPremium=" + AnnualPremium + "&CustomerDemand=" + CustomerDemand + * "&caseText=" + caseText + "&InsuranceCompany=" + InsuranceCompany + * "&InsuranceProducts=" + InsuranceProducts + "&sex="+sex+ * "&appellation="+appellation+ "&id="+id; */ $.post("/cases/add", { LastName : LastName, title : title, age : age, occupation : occupation, Income : Income, AnnualPremium : AnnualPremium, CustomerDemand : CustomerDemand, caseText : caseText, InsuranceCompany : InsuranceCompany, InsuranceProducts : InsuranceProducts, sex : sex, appellation : appellation, id : id }, function(data) { if (data.status == 0) { $(".contact_tips").attr("style", "inline"); if (id > 0) { document.getElementById("sp").innerText = "编辑成功"; } else { document.form1.reset(); } location.href = "#tips"; // 清空选项 // $("#reset").click(); } else { alert("添加失败"); } }); // ajax提交数据 // $.ajax({ // type : 'post', // data : submitValue, // url : '/cases/add', // cache : false, // async : true, // success : function(data) { // if (data.status == 0) { // $(".contact_tips").attr("style", "inline"); // // if(id>0){ // document.getElementById("sp").innerText ="编辑成功"; // }else{ // document.form1.reset(); // } // location.href="#tips"; // //清空选项 // // $("#reset").click(); // // } else { // alert("添加失败"); // } // } // }); }?
?
?
注意:编辑页面和新增案例页面一致,同一个页面。
?
弄好后效果如图:
?
如果我提交时候,将case.js代码中注释掉得 $.ajax 代码放开,采用这个异步提交方式的话,我用火狐浏览器看post请求
caseText值是正常的,即html代码,但是我在类里面获取caseText值时候发现 <script>代码及后面的test都不见了。
莫非jquery中的 ajax方式将 参数 处理了?
时间紧只能用$.post方式,这回成功了,一堆html代码包括 <script>一堆转义的html代码传到了后台,后台直接插入数据库。
?
ckeditor本身采用了传递html代码方式,避免了恶意代码攻击,存到数据库也是html代码,但是我进入到编辑页面时候,需要将存入数据库的html代码再放入ckeditor文本框中,注意:不要做转义处理,ckeditor接受到方才提交的html代码,会自动转义的,这回就能看到刚才提交后的效果。
?
展示详情时候,需要将hmtl代码直接输出,${caseText} 或者用 <c:out value="${caseText}" escapeXml="false"></c:out>
这样输出到页面才是正确的值。
?
结论:进入编辑页面时候 ,ckeditor需要接收html代码,不是转义后的,因为ckeditor会自动转义回来的。
?
进入详情页时候直接输出即可。
?