今天做了一个用户管理的功能
网页效果图如下:
其实套路都是差不多的,但是有些地方需要特殊处理一下
先附上数据库的用户表吧:
id,username,realname,password,showorder都直接显示就可以了
但是显示deptno(部门id)和rank(群组id)感觉会很怪很怪吧,而且看我上面网页上所显示是其所属的部门名称和群组名称
这时候就需要多表查询了
再附上部门表和群组表:
1.部门表
2.群组表
下面是我多表查询的代码:
SELECT u.id,u.username,u.realname,u.password,d.deptname,u.sex,r.name,u.showorder
FROM t_user u,t_dept d,t_rank r
WHERE u.deptno=d.id AND u.rank=r.id
查询结果如下截图:
发现查询出来的sex为1(男)或0(女),这里还需要做一个小小的处理
在UserDao中此方法判断一下就行
下面讲一下下面的分页:
先附上的已经写好的分页通用的java代码:
package tool;
public class PageUtil {
private int total;//一共多少条
private int pageSize=2;//一页的条数
private int totalPage = 1;//一共多少页
private int currPage = 1;//当前页
private int firstCurrTnum = 0;//当前第一条 条数
private String uri="";
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
if(total%pageSize==0){
totalPage = total/pageSize;
}else{
totalPage = total/pageSize+1;
}
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getCurrPage() {
return currPage;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
public int getFirstCurrTnum() {
firstCurrTnum = (currPage-1)*pageSize;
return firstCurrTnum;
}
public void setFirstCurrTnum(int firstCurrTnum) {
this.firstCurrTnum = firstCurrTnum;
}
/**
* 得到分页的Html
* @return
*/
public String getHtml(){
StringBuffer buffer = new StringBuffer();
buffer.append("<table width=\"90%\" align=\"center\" style=\"padding-right:40px;\">");
buffer.append("<tr><td align=\"right\">共"+getTotal()+"条,"+getTotalPage()+"页,当前第"+getCurrPage()+"页 ");
buffer.append("<a href=\""+getUri()+"&currPage=1\">首页 </a>");
if(getCurrPage()==1){
buffer.append("<a href='"+getUri()+"&currPage=1'> 上一页</a>");
}else{
buffer.append("<a href='"+getUri()+"&currPage="+(getCurrPage()-1)+"'> 上一页</a>");
}
if(currPage==totalPage){
buffer.append("<a href='"+getUri()+"&currPage="+getTotalPage()+"'> 下一页</a>");
}else{
buffer.append("<a href='"+getUri()+"&currPage="+(getCurrPage()+1)+"'> 下一页</a>");
}
buffer.append("<a href=\""+getUri()+"&currPage="+getTotalPage()+"\">尾页</a> </td></tr></table>");
return buffer.toString();
}
}
不难发现传入总条数和当前页还有uri就行了
总条数直接通过数据库查就行了,当前页的话通过JSP来返就行,刚进去的时候显示是第一页的因为PageUtil中的currPage一开始的默认值为1,Uri在serlet设置一个static字符串就行,因为调用的都是UserSerlet中的list方法
可以会发现我们一页只显示两条信息,这时候就需要改变一下之前的sql语句了,改变代码如下:
SELECT u.id,u.username,u.realname,u.password,d.deptname,u.sex,r.name,u.showorder
FROM t_user u,t_dept d,t_rank r
WHERE u.deptno=d.id AND u.rank=r.id
limit ?,?
/**
前面一个需要设置的参数应该是第几条信息开始(通过传入当前是第几页通过(currPage-1)*pageSize来计算出来),后面的一个需要设置的参数应该是一页应该显示多少条(pageUtil中写了固定了2条)
**/
这样就把用户信息都列出来了
下面来说说新建
用户的新建和其他有些许不同
先发新建页面的效果图吧
点击新建后要把所有的部门和群组都查出来,然后通过request.setAttribute()方法来给JSP页面
点击保存后把所有的值取出来就行了
由于我html学了都快忘光了,下面是一个下拉框命名的操作。。。。。
<select name="">
<option value="">部门或群组的名字<option>
</select>
<!--value中填的是部门或群组的id,因为用户表中里都是deptno和rank都是int类型--!>
<!--name当然是java代码中去取其中值所设置的名字,随意我设置的是deptno和rank--!>
单选框做一个简单的判断之后插入数据库就行
修改这个功能跟之前做的也有些许不同
先附上页面截图(我选中的是第三条记录):
其他处理应该都是差不多的,就是一个复选框的问题
遍历的过程中如果用户的部门名称和部门表中的名称对应的话,在<option>标签中多加上一个selected='selected'表示选上
同理群组名称也是一样的道理
贴一段jsp中的脚本代码好了:
<select name="rankid">
<%
List<Rank> ranks = (List<Rank>)request.getAttribute("ranks");
for(Rank rank: ranks){
String select = "";
if(rank.getName().equals(vuer.getRankname())){
select = " selected='selected'";
}
out.println("<option value='"+rank.getId()+"'"+select+">"+rank.getName()+"</option>");
}
%>
</select>
男女单选框也是差不多的道理
<%
if(vuer.getSex().equals("1")){
out.println("<input type=\"radio\" name=\"sex\" checked=\"checked\" value=\"男\"/>男<input type=\"radio\" name=\"sex\" value=\"女\"/>女");
}else{
out.println("<input type=\"radio\" name=\"sex\" value=\"男\"/>男<input type=\"radio\" name=\"sex\" checked=\"checked\" value=\"女\"/>女");
}
%>
JSP中一个隐藏的标签来存用户id就行了
还有一个小功能是可以不输入修改的密码,这时候就需要在更新数据库的时候做点小手脚了,不是很难,直接贴代码就行了
通过id和User对象来修改
/**
* 通过id来更新该用户
* @param id
*/
public void updateUserById(int id,Vuer vuer) {
// TODO Auto-generated method stub
try {
conn = getConn();
String sql = null;
if(vuer.getPassword()!=""){
sql = "update t_user set username=?,realname=?,password=?,deptno=?,sex=?,rank=?,showorder=? where id =?";
}else{
sql = "update t_user set username=?,realname=?,deptno=?,sex=?,rank=?,showorder=? where id =?";
}
ps = conn.prepareStatement(sql);
if(vuer.getPassword()!=""){
ps.setString(1,vuer.getUsername());
ps.setString(2,vuer.getRealname());
ps.setString(3,vuer.getPassword());
ps.setInt(4,vuer.getDeptno());
ps.setInt(5,Integer.valueOf(vuer.getSex()));
ps.setInt(6,vuer.getRank());
ps.setInt(7,vuer.getShoworder());
ps.setInt(8, id);
}else{
ps.setString(1,vuer.getUsername());
ps.setString(2,vuer.getRealname());
ps.setInt(3,vuer.getDeptno());
ps.setInt(4,Integer.valueOf(vuer.getSex()));
ps.setInt(5,vuer.getRank());
ps.setInt(6,vuer.getShoworder());
ps.setInt(7, id);
}
ps.executeUpdate();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
closeConn(conn, ps, rs);
}
}
这样就实现了用户管理界面的功能,删除功能不太难就不讲了
今天是第八天啦,明天孤军奋战啦,还会继续更新哒