甲供材页面开发
页面
一个皮页面(kpajc7.jsp),3个tab子页面,两个弹出框页面,点击tab标签跳转页面,皮页面中tab标签以及js代码为:
1 <div id="kpajc7ListTab" style="height: 95%"> 2 <iframe name="kpajc7List_<%=sessionId %>" id="kpajc7ListID" width="100%" height="92%" frameborder=0 3 src="/erp/kpa/do?_pageId=kpajc7&_action=I&_sessionId=<%=sessionId%>"></iframe> 4 </div>
1 var tabObj = new TabTable("合同清单", kpajc7c1ListTab,showTab1); 2 tabObj.add("结算甲供材明细", kpajc7ListTab, showTab2); 3 tabObj.add("IN甲供材明细", kpajc7InListTab,showTab3); 4 tabObj.setHeight(80); 5 tabObj.setTabWidth(15); 6 tabObj.setDrawIn('showDiv'); 7 tabObj.draw(); 8 function showTab2() { 9 window.frames["kpajc7List_<%=sessionId%>"].form1.kpmc1no_qry.value = document.getElementById("kpmc1no").value; 10 window.frames["kpajc7List_<%=sessionId%>"].form1.action="/erp/kpa/do?_pageId=kpajc7&_action=I"; 11 window.frames["kpajc7List_<%=sessionId%>"].form1.target="kpajc7List_<%=sessionId%>"; 12 window.frames["kpajc7List_<%=sessionId%>"].form1.submit(); 13 tabObj.show(kpajc7ListTab); 14 }
前端数据提交给后台的两种方式(table表单提交/js提交):
1.表单提交(使用中冠api提供的标签),需要在jsp页面开头用java代码写好target和formAction
<% String target = "kpajc7List_"+sessionId; String formAction = "/erp/kpa/do?_pageId=kpajc7&_sessionId="+sessionId; %> <de:btn action="m" class="btn btn-success" style="align:center" value="合并"/>
2.js提交(点击事件调用js代码,也需要在jsp开头用java代码写好target和formAction)
function cancel(){ form1._action.value = "C"; form1.submit(); }
点击按钮弹框(走后台,弹出一个jsp页面,一般用于新增一条数据或者针对某一条数据进行修改)
1 function create() { 2 var w = screen.availWidth * 98/100 ; 3 var h = screen.availHeight * 70/100 ; 4 var kpmc1no = document.getElementById("kpmc1no_qry").value; 5 var url="/erp/kpa/do?_pageId=kpajc7InMaster&_action=I&_sessionId="+sessionId+"&flag=N&kpmc1no=" +kpmc1no; 6 var name="mshjFinalAmtMasterCreateNew"; 7 var features = "top = 80, left = 1,width="+w+",height="+h+",menubar=no,scrollbars=no,resizable=yes,status=yes"; 8 var winObj=window.open(url,name,features); 9 var loop = setInterval(function() { 10 if(winObj.closed) { 11 clearInterval(loop); 12 reflash(cimp1no); 13 } 14 }, 1); 15 }
隐藏域使用技巧
1.点击事件通过js将数据填充到皮页面或者本页面的隐藏域中(在某些情况下将数据添加到request流中,更方便地传给后台的一种方式)
function query() { var cnmdesc = document.getElementById("cnmdesc").value; window.parent.document.getElementById("cnmdesc").value = cnmdesc; window.parent.showTab3(); }
对于数据是通过本页面java中的sql查询出来的情况(没有走后台),此时无法通过checkbox将选择的某几条数据发送给后台(也就是无法通过List<> list = (List<>) (infoIn.getVOs("V1")==null?new VO() : infoIn.getVOs("V1"))这种方式获取前台数据),此时可以通过js将checkbox中选择的数据的唯一标志(id)填充到页面的隐藏域中,再发送给后台,此时后台获取到数据的唯一标志,可以查询到该条数据
1 function check(){ 2 var myBox = document.getElementsByName("box"); 3 var matrlNo = ""; 4 for(var i=0; i<myBox.length; i++){ 5 if(myBox[i].checked){ 6 matrlNo = matrlNo + "," + document.getElementById("matrlNo"+i).value; 7 } 8 } 9 document.getElementById("matrlNo").value = matrlNo; 10 form1._action.value = "R"; 11 form1.submit(); 12 }
对于进入后台后再次弹出新页面(业务需要在本页面显示)的情况(sessionId丢失)(对于所有情况能加上sessionId就加上,页面中也需要加上session的隐藏域:<de:text type="hidden" name="_sessionId" value="<%=sessionId %>"/>):
1.有可能是皮页面的tab子页面标签中的sessionId没有写,也有可能是js代跳转中没有加sessionId
<div id="kpajc7ListTab" style="height: 95%"> <iframe name="kpajc7List_<%=sessionId %>" id="kpajc7ListID" width="100%" height="92%" frameborder=0 src="/erp/kpa/do?_pageId=kpajc7&_action=I&_sessionId=<%=sessionId%>"></iframe> </div> ``` ``` var sessionId="<%=sessionId%>"; function showTab2() { window.frames["kpajc7List_<%=sessionId%>"].form1.kpmc1no_qry.value = document.getElementById("kpmc1no").value; window.frames["kpajc7List_<%=sessionId%>"].form1.action="/erp/kpa/do?_pageId=kpajc7&_action=I"; window.frames["kpajc7List_<%=sessionId%>"].form1.target="kpajc7List_<%=sessionId%>"; window.frames["kpajc7List_<%=sessionId%>"].form1.submit(); tabObj.show(kpajc7ListTab); }
2.有可能是页面中开头的formAction和target里没有sessionId,在form表单中加上target属性
String formAction="/erp/kpa/do?_pageId=kpajc7InMaster&_sessionId="+sessionId; String formTarget="kpajc7InMaster_"+sessionId;