目前还是没能调到UserModule
user.getId返回值是int
package net.wendal.nutzdemo.bean;
import java.util.Date;
import org.nutz.dao.entity.annotation.ColDefine;
import org.nutz.dao.entity.annotation.Column;
import org.nutz.dao.entity.annotation.EL;
import org.nutz.dao.entity.annotation.Id;
import org.nutz.dao.entity.annotation.Name;
import org.nutz.dao.entity.annotation.Prev;
import org.nutz.dao.entity.annotation.Table;
@Table("t_user")
public class User {
@Id
private int id;
@Name
private String name;
@Column("passwd")
@ColDefine(width = 128)
private String password;
@Column("salt")
@ColDefine(width = 128)
private String salt;
@Column
private int age;
@Column
@Prev(els = @EL("now()"))
private Date createTime;
@Column("updatetime")
private Date updateTime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
package net.wendal.nutzdemo.module;
import java.util.Date;
import javax.servlet.http.HttpSession;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.QueryResult;
import org.nutz.dao.pager.Pager;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.nutz.mvc.adaptor.JsonAdaptor;
import org.nutz.mvc.annotation.*;
import org.nutz.mvc.filter.CheckSession;
import net.wendal.nutzdemo.bean.User;
@IocBean // 声明为Ioc容器中的一个Bean
@At("/user") // 整个模块的路径前缀
@Ok("json:{locked:'password|salt',ignoreNull:true}") // 忽略password和salt属性,忽略空属性的json输出
@Fail("http:500") // 抛出异常的话,就走500页面
@Filters(@By(type=CheckSession.class, args={"me", "/"})) // 检查当前Session是否带me这个属性
public class UserModule {
@Inject // 注入同名的一个ioc对象
protected Dao dao;
@At
public int count() { // 统计用户数的方法,算是个测试点
return dao.count(User.class);
}
@At
@Filters // 覆盖UserModule类的@Filter设置,因为登陆可不能要求是个已经登陆的Session
public Object login(@Param("username")String name, @Param("password")String password, HttpSession session) {
User user = dao.fetch(User.class, Cnd.where("name", "=", name).and("password", "=", password));
if (user == null) {
return false;
} else {
session.setAttribute("me", user.getId());
return true;
}
}
@At
@Ok(">>:/") // 跟其他方法不同,这个方法完成后就跳转首页了
public void logout(HttpSession session) {
session.invalidate();
}
@At
public Object add(@Param("..")User user) { // 两个点号是按对象属性一一设置
NutMap re = new NutMap();
String msg = checkUser(user, true);
if (msg != null){
return re.setv("ok", false).setv("msg", msg);
}
user = dao.insert(user);
return re.setv("ok", true).setv("data", user);
}
@At
public Object update(@Param("..")User user) {
NutMap re = new NutMap();
String msg = checkUser(user, false);
if (msg != null){
return re.setv("ok", false).setv("msg", msg);
}
user.setName(null);// 不允许更新用户名
user.setCreateTime(null);//也不允许更新创建时间
user.setUpdateTime(new Date());// 设置正确的更新时间
dao.updateIgnoreNull(user);// 真正更新的其实只有password和salt
return re.setv("ok", true);
}
// @AdaptBy(type=JsonAdaptor.class)
@At
public NutMap delete(@Param("id")int id, @Attr("me")int me) {
if (me == id) {
return new NutMap().setv("ok", false).setv("msg", "不能删除当前用户!!");
}
dao.delete(User.class, id); // 再严谨一些的话,需要判断是否为>0
return new NutMap().setv("ok", true);
}
@At
public Object query(@Param("name")String name, @Param("..")Pager pager) {
Cnd cnd = Strings.isBlank(name)? null : Cnd.where("name", "like", "%"+name+"%");
QueryResult qr = new QueryResult();
qr.setList(dao.query(User.class, cnd, pager));
pager.setRecordCount(dao.count(User.class, cnd));
qr.setPager(pager);
return qr; //默认分页是第1页,每页20条
}
@At("/")
@Ok("jsp:jsp.user.list") // 真实路径是 /WEB-INF/jsp/user/list.jsp
public void index() {
}
protected String checkUser(User user, boolean create) {
if (user == null) {
return "空对象";
}
if (create) {
if (Strings.isBlank(user.getName()) || Strings.isBlank(user.getPassword()))
return "用户名/密码不能为空";
} else {
if (Strings.isBlank(user.getPassword()))
return "密码不能为空";
}
String passwd = user.getPassword().trim();
if (6 > passwd.length() || passwd.length() > 12) {
return "密码长度错误";
}
user.setPassword(passwd);
if (create) {
int count = dao.count(User.class, Cnd.where("name", "=", user.getName()));
if (count != 0) {
return "用户名已经存在";
}
} else {
if (user.getId() < 1) {
return "用户Id非法";
}
}
if (user.getName() != null)
user.setName(user.getName().trim());
return null;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.6/css/bootstrap.min.css">
<title>用户的CURD</title>
</head>
<body>
<div id="top_nav">
<a href="${base}/user/logout">登出</a>
</div>
<div class="center-wrapper">
<div class="center-content">
<%--<div class="row no-m">--%>
<%--<div class="col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">--%>
<%--<header class="panel-heading no-b text-center" style="font-size:30px;"> 用户列表 </header>--%>
<%--<div id="app">--%>
<%--<div>--%>
<%--<table id="tb1" border="2">--%>
<%--<thead>--%>
<%--<tr>--%>
<%--<td>id</td>--%>
<%--<td>用户名</td>--%>
<%--<td>年龄</td>--%>
<%--<td>创建日期</td>--%>
<%--<td>操作</td>--%>
<%--<td>操作</td>--%>
<%--</tr>--%>
<%--</thead>--%>
<%--<tbody>--%>
<%--</tbody>--%>
<%--</table>--%>
<%--</div>--%>
<%--<div>--%>
<%--<a href="#">上一页</a>--%>
<%--<a href="#">下一页</a>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="row no-m">--%>
<%--<div class="col-xs-5 col-xs-offset-1 col-sm-3 col-sm-offset-1 col-md-2 col-md-offset-2">--%>
<%--<section class="panel bg-white no-b fadeIn animated"> <header class="panel-heading no-b text-center" style="font-size:30px;"> 添加用户 </header>--%>
<%--<form id="add_form" action="#" role="form" method="post">--%>
<%--<div class="form-group">--%>
<%--<input type="text" id="username" name="name" required class="form-control input-lg mb25" placeholder="用户名">--%>
<%--</div>--%>
<%--<div class="form-group">--%>
<%--<input type="password" id="password" name="password" required class="form-control input-lg mb25" placeholder="密码">--%>
<%--</div>--%>
<%--<div class="form-group">--%>
<%--<input type="text" id="age" name="age" required class="form-control input-lg mb25" placeholder="年龄">--%>
<%--</div>--%>
<%--<p id="tip" class="bg-danger p15" style="display: none"></p>--%>
<%--<div class="show">--%>
<%--<button class="btn btn-primary btn-lg btn-block" type="submit" id="add_button" data-loading-text="添加">添加</button>--%>
<%--</div>--%>
<%--<p id="tip2" class="bg-danger p15" style="display: none"></p>--%>
<%--<div class="show">--%>
<%--<button class="btn btn-primary btn-lg btn-block" type="submit" id="update_button" data-loading-text="更新">更新</button>--%>
<%--</div>--%>
<%--<br>--%>
<%--<br>--%>
<%--<div class="show">--%>
<%--<button class="btn btn-primary btn-lg btn-block" type="button" id="delete233_button" data-loading-text="删除233">删除233</button>--%>
<%--</div>--%>
<%--</form>--%>
<%--<form id="delete_form" action="#" role="form" method="post">--%>
<%--<div class="form-group">--%>
<%--<input type="text" id="id" namge="id" required class="form-control input-lg mb25" placeholder="ID">--%>
<%--</div>--%>
<%--<div class="show">--%>
<%--<button class="btn btn-primary btn-lg btn-block" type="button" id="delete_button" data-loading-text="删除">删除</button>--%>
<%--</div>--%>
<%--</form>--%>
<%--</div>--%>
<%--</div>--%>
<div>
<form action="#" id="user_query_form">
条件<input type="text" name="name">
页数<input type="text" name="pageNumber" value="1">
每页<input type="text" name="pageSize" value="10">
</form>
<button id="user_query_btn">查询</button>
<p>---------------------------------------------------------------</p>
<p id="user_count"></p>
<div id="user_list">
</div>
</div>
<div>
<p>---------------------------------------------------------------</p>
</div>
<div id="user_add">
<form action="#" id="user_add_form">
用户名<input name="name">
密码<input name="password">
</form>
<button id="user_add_btn">新增</button>
</div>
</div>
</div>
</body>
<script type="text/javascript" src="https://cdn.staticfile.org/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.staticfile.org/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script type="text/javascript" src="https://cdn.staticfile.org/layer/2.3/layer.js"></script>
<script type="text/javascript">
var pageNumber = 1;
var pageSize = 10;
var base = '<%=request.getAttribute("base")%>';
function user_reload() {
$.ajax({
url : base + "/user/query",
data : $("#user_query_form").serialize(),
dataType : "json",
success : function(data) {
console.log(data);
$("#user_count").html("共"+data.pager.recordCount+"个用户, 总计"+data.pager.pageCount+"页");
var list_html = "";
console.log(data.list);
for (var i=0;i<data.list.length;i++) {
var user = data.list[i];
console.log(user);
var tmp = "\n<p>" + user.id + " " + user.name
+ " <button onclick='user_update(" + user.id +");'>修改</button> "
+ " <button onclick='user_delete(" + user.id +");'>删除</button> "
+ "</p>";
list_html += tmp;
}
$("#user_list").html(list_html);
}
});
}
$(function(){
//这里就是放页面加载的时候执行的函数。
getList();
getList2();
$("#user_query_btn").click(function() {
user_reload();
});
$("#user_add_btn").click(function() {
$.ajax({
url : base + "/user/add",
data : $("#user_add_form").serialize(),
dataType : "json",
success : function(data) {
if (data.ok) {
user_reload();
alert("添加成功");
} else {
alert(data.msg);
}
}
});
});
$("#add_button").click(function() {
// alert("添加用户");
$.ajax({
url : "${base}/user/add",
data : $("#add_form").serialize(),
method : "POST",
dataType : "json",
success : function(resp) {
// var res = resp;
// alert("添加成功");
if (resp.ok) {
// alert("true");
// getList();
var user = resp.data;
$('#tb1').append('<tr><td>' + user.id + '</td><td>' + user.name + '</td><td>' + user.age + '</td><td>' + user.createTime + '</td><td>' + " <button onclick='user_update(" + user.id +");'>修改</button> " + '</td><td>' + " <button onclick='user_delete(" + user.id +");'>删除</button> " + '</td></tr>');
alert('添加成功');
} else {
alert('false ' + resp.msg);
}
}
});
return false;
});
$("#update_button").click(function() {
$.ajax({
url : "${base}/user/update",
data : $("#add_form").serialize(),
// data : {"id": $("#id").val()},
method : "POST",
dataType : "json",
success : function(resp) {
if (resp.ok) {
getList();
alert('修改成功');
} else {
alert('fasle ' + resp.msg);
}
}
});
return false;
});
$("#delete_button").click(function () {
$.ajax({
url : "${base}/user/delete233",
// data : $("#add_form").serialize(),
data : {"id": $("#id").val()},
method : "POST",
dataType : "json",
success : function(resp) {
if (resp.ok) {
getList();
alert('修改成功');
} else {
alert('fasle ' + resp.msg);
}
}
});
return false;
});
$("#delete233_button").click(function() {
$.ajax({
url : "${base}/user/delete233",
// data : $("#add_form").serialize(),
data : {"id": $("#id").val()},
method : "POST",
dataType : "json",
success : function(resp) {
if (resp.ok) {
getList();
alert('修改成功');
} else {
alert('fasle ' + resp.msg);
}
}
});
return false;
});
});
function getList() {
// alert("登陆成功");
$.ajax({
url : "${base}/user/list",
method : "GET",
dataType : "json",
success : function(resp) {
$('#tb1').html('<thead>\n' + '<tr>' +'<td>id</td>' +'<td>用户名</td>' +'<td>年龄</td>' +'<td>创建日期</td>' +'<td>操作</td>' +'<td>操作</td>' +'</tr>' +'</thead>' +'<tbody>' +'' +'</tbody>')
// $('#tb1').append
for (var i in resp.list) {
var user = resp.list[i];
$('#tb1').append('<tr><td>' + user.id + '</td><td>' + user.name + '</td><td>' + user.age + '</td><td>' + user.createTime + '</td><td>' + '修改' + '</td><td>' + '删除' + '</td></tr>');
}
}
});
}
function getList2() {
$.ajax({
url : ${base} + "/user/query",
data : $("#user_query_form").serialize(),
dataType : "json",
success : function(data) {
console.log(data);
$("#user_count").html("共"+data.pager.recordCount+"个用户, 总计"+data.pager.pageCount+"页");
var list_html = "";
console.log(data.list);
for (var i=0;i<data.list.length;i++) {
var user = data.list[i];
console.log(user);
var tmp = "\n<p>" + user.id + " " + user.name + " " + user.age
+ " <button onclick='user_update(" + user.id +");'>修改</button> "
+ " <button onclick='user_delete(" + user.id +");'>删除</button> "
+ "</p>";
list_html += tmp;
}
$("#user_list").html(list_html);
}
});
}
function user_update(userId) {
var passwd = prompt("请输入新的密码");
if (passwd) {
$.ajax({
url : base + "/user/update",
data : {"id":userId,"password":passwd},
dataType : "json",
success : function (data) {
if (data.ok) {
user_reload();
alert("修改成功");
} else {
alert(data.msg);
}
}
});
}
};
function user_delete(userId) {
var s = prompt("请输入y确认删除");
if (s == "y") {
$.ajax({
url : base + "/user/delete",
data : {"id":userId},
// method : 'GET',
dataType : "json",
success : function (data) {
if (data.ok) {
user_reload();
alert("删除成功");
} else {
alert(data.msg);
}
}
});
}
};
</script>
</html>