动态表单-续

1、这周在工作之余对动态表单又做了点改进,之前在做动态表单的时候,用户新建表的时候,就在数据库中新建了该表,而且在新建表的时候自动为表新建了主键id,感觉这样不太好,做了修改后,用户可以定义自己的主键,但是最多只能定义一个主键,但是如果用户可以定义自己的主键的话,这样生成动态表单和验证以及查看表单数据的时候因为读取的是真是表中的数据无法判断哪个是主键,我现在处理是在后台查询数据的时候先从字段信息表读取,之后根据is_key字段判断如果是主键的话就一律转换成id,这样我在界面判断就容易判断了,代码如下:

后台:

public List<Fields> getFieldList(String tbName) {
List<Fields> fieldList = new ArrayList<Fields>();
String sql = "select * from fields_info where table_name=?";
Connection connection = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
connection = ConnectManager.getConnection();
ps = connection.prepareStatement(sql);
ps.setString(1, tbName);
rs = ps.executeQuery();
Fields field = null;
while (rs.next()) {
field = new Fields();
field.setFieldId(rs.getString("field_id"));
field.setTableName(rs.getString("table_name"));
field.setIsKey(rs.getInt("is_key"));
if (rs.getInt("is_key") == 1) {// 主键
field.setFieldName("id");
} else {
field.setFieldName(rs.getString("field_name"));
}
field.setFieldNameCn(rs.getString("field_name_cn"));
field.setFieldType(rs.getString("field_type"));
field.setMinLength(rs.getInt("min_length"));
field.setMaxLength(rs.getInt("max_length"));
field.setDecimalPoint(rs.getInt("decimal_point"));
field.setIsNull(rs.getInt("is_null"));
field.setDefaultVal(rs.getString("default_val"));
field.setContext(rs.getString("context"));
field.setDataFormat(rs.getString("data_format"));
field.setDisplay(rs.getString("display"));
field.setDisplayContext(rs.getString("display_context"));
field.setOnForm(rs.getInt("on_form"));
field.setCreateDate(rs.getTimestamp("create_date"));
fieldList.add(field);
}
} catch (Exception e) {
System.err.println("获取" + tbName + "表字段列表getFieldList()--发生异常" + e);
} finally {
ConnectManager.free(connection, ps, rs);
}
return fieldList;
}

界面:

<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<s:iterator id="data" status="st" value="tbListMap[0]">
<s:iterator id="lsMap" value="data">
<s:if test='key!="id"'>
<th><s:property value="key"/></th>
</s:if>
</s:iterator>
</s:iterator>
<th>操作</th>
</thead>
<tbody>
<s:iterator id="data" status="st" value="tbListMap">
<tr>
<s:iterator id="lsMap" value="data">
<s:if test='key!="id"'>
<td><s:property value="value"/></td>
</s:if>
</s:iterator>
<td align="center">
<a href="javascript:void(0)" onclick="javascript:delRecord('<s:property value="id"/>')">删除</a>
</td>
</tr>
</s:iterator>
</tbody>
</table>

现在做到的就是表所有记录的查看,表单的生成和验证及记录的删除,但是记录的修改我还没想到怎么办到,这个以后慢慢摸索吧,现在感觉虽然有点想法但是感觉有点繁琐。

2、这次学到的另外一个重要的知识点就是关于jqGrid的数据显示方面的,因为之前在做其它项目之前,方法都是人家做好的,返回的对象是PageList对象,PageList中包含一个datas对象数组和一个page对象用来分页,但是之前对这个没太在意,jqGrid显示数据时有一个

jsonReader:{
root:"datas",
cell:'',
page:"page.pageNow",
total:"page.totalPage",
records:"page.totalSize",
repeatitems:false
},

属性用来读取从服务器端返回的数据,其中root:"datas",便是服务器返回的数据,datas只是PageList中存放数据信息的对象数组,返回格式是json,但是服务器若只返回List<对象>jqGrid是无法读取的,须放到map中,然后jqGrid读取的root值便是map中的key,这样jqGrid便可正确的读取数据了,如下:

action:

/**
* 获取table列表,返回json
*
* @return
*/
public String getAllTable() {
tbMap = new HashMap<String, Object>();
tbList = tableService.getTableList(sidx, sord);
page = new Page(page.getPageNow(), page.getPageSize(), tableService
.getTableList().size());
tbMap.put("datas", tbList);
tbMap.put("page", page);
return SUCCESS;
}

页面:

jsonReader:{
root:"datas",
cell:'',
page:"page.pageNow",
total:"page.totalPage",
records:"page.totalSize",
repeatitems:false
},

posted @ 2013-01-27 15:17  风儿飞  阅读(449)  评论(0编辑  收藏  举报