在写封装方法之前需要准备好要用到实体类。创建一个名叫SelectVo的实体类,同时声明两个变量id与name用来接收需要用于绑定下拉框的选中值与显示值。
public class SelectVo implements Serializable {
public Integer id;
public String name;
public Integer getId() {return id; }
public void setId(Integer id) {this.id = id; }
public String getName() {return name; }
public void setName(String name) {this.name = name; }
}
实体类准备好了之后需要新建一个JS文件,这个JS文件里面放的是用来绑定下拉框的方法。这个方法需要用到两个参数id与url,id是在JSP中绑定下拉框用的select标签的id,url是用于请求Servlet的链接。这个方法用的是post提交,首先把下拉框的内容清空,接着给下拉框添加一个默认的选项,然后解析Servlet传回来的数据,最后遍历数据循环给下拉框添加选项。
function appendOption(id, url) {
$.post(url,function(data){
$("#" + id).empty();
$("#" + id).append("<option value=" + 0 + ">" + "----请选择----" + "</option>");
var dt=JSON.parse(data);
$.each(dt, function (i) {
$("#" + id).append("<option value=" + dt[i].id + ">" + dt[i].name + "</option>");
});
});
}
实体类与JS文件准备好了之后就到了JSP层,因为JS文件封装了绑定下拉框的方法,所以只需要给这个方法传需要用到的两个参数就行。根据实际情况来写下拉框的绑定是在页面加载时发生还是某事件触发时发生。
$(function () {
appendOption("Types", "${ctx}/servlet/CreditServlet?type=selectTypes");
});
JSP层完成之后就到了Servlet层。声明一个SelectVo类型的表用于接收JDBC返回来的数据,同时需要给JDBC的findAll方法传三个参数,分别是SelectId、SelectName和TableName。SelectId是需要绑定的表的主键ID,SelectName是需要绑定的表的值,TableName是用来获取绑定数据的表名。封装下拉框绑定的方法中这三个参数是比较重要的,这三个参数决定了需要绑定的下拉框数据是来源于哪个表中的主键ID与该表中的用于显示的字段。然后就是对JDBC查询数据库返回来数据的进行处理并将这些数据返回到JSP页面中用于绑定下拉框。
protected void selectTypes(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
List<SelectVo> vos = creditService.findAll("SelectId", "SelectName", "TableName");
JSONArray jsonArray = JSONArray.fromObject(vos);
resp.getWriter().write(jsonArray.toString());
}
最后就是JDBC层,首先声明用于连接数据库要用到的Connection、PreparedStatement和ResultSet。同样需要声明一个SelectVo类型的表用来存放数据库查询出来的数据,还需要声明一个SelectVo类型的变量。连接数据库查询存储过程时需要在SQL语句中把Servlet传过来的三个参数绑定上去(select SelectId as id, SelectName as name from TableName)。最后用while遍历数据库返回来的数据,将遍历到的数据保存到SelectVo类型的变量中再保存到SelectVo类型的表中,最后将这张表返回到Servlet。
private Connection con=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
public List<SelectVo> findAll(String ID, String NAME, String TBName) {
List<SelectVo> list = new ArrayList<SelectVo>();
SelectVo selectVo = null;
try {
con = DbUtil.getConnection();
ps = con.prepareStatement("select "+ID+" as id,"+NAME+" as name from "+TBName+"");
rs = ps.executeQuery();
while (rs.next()) {
selectVo = new SelectVo();
selectVo.setId((int)rs.getShort("id"));
selectVo.setName(rs.getString("name"));
list.add(selectVo);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DbUtil.close(con, ps, rs);
}
return list;
}
Servlet接收到JDBC返回过来的数据之后对数据进行处理并将这些数据返回到JSP页面中进行下拉框的绑定。到这里整个下拉框的绑定的封装方法就已经结束了,这个封装方法中需要改动的地方就两个,一个是在JSP页面中调用JS绑定下拉框方法中需要传的两个参数,另一个是Servlet中传到JDBC用于数据库查询的三个参数。