在工作中发现struts2的强大功能,表为table1,字段有a、b、c、d、e五个字段,其中a、b为table1表的主键。在使用ssh2框架中,hibernate会为复合主键的表生成两个类,为
public class Table1{
private Table1Id id;
private String c;
private String d;
private String e;
....省去get、set方法
}
public class Table1Id{
private String a;
private String b;
....省去get、set方法
}
假设有以下使用场景,按条件查询table1表列表,在列表中有选择性的删除某些记录。这时肯定得往Action方法中传Table1表的主键,但是此表是复合主键,通常情况下我们前台会拼id字符串,在action中解析id字符串,但是复合主键如果特多的法会很麻烦,而且会越来越大,我们现在的项目就是一个七个字段的复合主键。我是这么做的。在jsp代码大体中如下。
<s:iterator value="listTable1" id="l" status="i">
<input type="checkbox" name="idList" value='<s:property value="#i.index/>"'/>
<input type="hidden" name='listTable1Id[<s:property value="#i.index/>"].a' value='<s:property value="#l.a/>"'>
<input type="hidden" name='listTable1Id[<s:property value="#i.index/>"].b' value='<s:property value="#l.b/>"'>
<s:property value="#l.c"/>
<s:property value="#l.d"/>
</s:iterator>
Action 大概如下
private List<String> idList = new ArrayList<String>();
private List<Table1Id> listTable1Id = new ArrayList<Table1Id>();
private List<Table1> listTable1= new ArrayList<Table1>();
public String del(){
for(String s : idList ){
Table1Id t = listTable1Id .get(s);
//调用service层根据主键删除主键的方法。
}
return SUCCESS;
}
这样就省去了组装串解析串的麻烦。前台循环后,提交的时候会依次把每个元素的Table1Id存到listTable1Id 中,这样我们只需要一个idList ,记录被选中的id,然后根据id从listTable1Id 取id就可以操作了