联合主键的单表维护解决方案
来源:
作者:陈金波
发布时间:2011-12-29
点击数:
通常我们的结果页面都会设置一个复选框,当用户选择某条记录时,把该条记录的主键提交到后台展现逻辑。如下: <TD align="center"> <logic:present id="ResultSet" property="BNDICT_T_Dictionary/businTypeID"> <html:checkbox styleId="checkall" name="list[@name="update"]/BNDICT_T_Dictionary/businTypeID" id="ResultSet" property="BNDICT_T_Dictionary/businTypeID" indexed="true" /> </logic:present> </TD>
但是有些表是联合主键,如BNDICT_T_Dictionary表,另一个主键是businID,是不是可以再加一个复选框来提交另一个主键值呢?如下:
<TD align="center"> <logic:present id="ResultSet" property="BNDICT_T_Dictionary/businTypeID"> <html:checkbox styleId="checkall" onclick="checkOther("checkall","checktwo")" name="list[@name="update"]/BNDICT_T_Dictionary/businTypeID" id="ResultSet" property="BNDICT_T_Dictionary/businTypeID" indexed="true" /> </logic:present> <logic:present id="ResultSet" property="BNDICT_T_Dictionary/businID"> <html:checkbox styleId="checktwo" style="width:0px;" name="list[@name="update"]/BNDICT_T_Dictionary/businID" id="ResultSet" property="BNDICT_T_Dictionary/businID" indexed="true" /> </logic:present> </TD> 为了在页面上只显示一个复选框,所以我们将第二个复选框的宽度设为0px使其隐藏,当用户选中某条记录前的复选框时,我们通过JS函数使这条记录对应的隐藏的复选框也选中,同样当用户取消选中时,也同样使隐藏的复选框取消选中。需要在页面中增加如下JS函数。 function checkOther(checkall,checktwo){ var checkall = document.getElementsByName(checkall); var checktwo = document.getElementsByName(checktwo); for(var i=0;i<checkall.length;i++) { if(checkall[i].checked == true){ checktwo[i].checked = true; }else if(checkall[i].checked == false){ checktwo[i].checked = false; } } } 另外我们还要重构全选函数checkAll(),并修改全选框的onclick属性值。 <TD align="center"> <logic:notEqual property="list[@type="BNDICT_T_Dictionary"]/@rowNum" value="0"> <html:checkbox name="chkAll" onclick="checkAll("checkall","checktwo")"/> </logic:notEqual>选择</TD>function checkAll(checkall,checktwo) { var checkall = document.getElementsByName(checkall); var checktwo = document.getElementsByName(checktwo); var ck = window.event.srcElement; if(ck.checked==true) { for(var i=0;i<checkall.length;i++) { checkall[i].checked = true; checktwo[i].checked = true; } }else{ for(var i=0;i<checkall.length;i++) { checkall[i].checked = false; checktwo[i].checked = false; } } } 通过传入后台的XML总线上的数据,可以看出两个主键的ID都传到了后台,下面只要在展现逻辑中增加一个数据设置即可 为了保证程序的绝对安全,在修改、删除之前要判断所有主键是否都有值。 另外新增时不能使用主键自动获取。 还有一个好处是,这种页面上的JS操作可以写进项目模板中,从而实现对联合主键的单表维护向导,但前提是属性生成向导中要支持选择多个主键才行。
- 上一篇:EOS报表使用经验[ 12-29 ]
- 下一篇:单点登录(SSO)—简介[ 02-03 ]