NutzCN Logo
问答 在往数据库中增删改时,有用到NutMap().setv()方法,它实现的是什么?
发布于 2761天前 作者 萧仁武 2370 次浏览 复制 上一个帖子 下一个帖子
标签:

NutMap().setv("ok", false).setv("msg", msg);

5 回复

那是拼resp的json吧

什么意思?将增删改的校验信息返回到页面吗?那新增中的 NutMap().setv("ok", true).setv("data", user);的.setv("data", user)是什么意思?

上完整代码

package com.zdwang.nutzbook.module;

import java.util.Date;

import javax.servlet.http.HttpSession;

import com.zdwang.nutzbook.bean.User;

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.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Attr;
import org.nutz.mvc.annotation.By;
import org.nutz.mvc.annotation.Fail;
import org.nutz.mvc.annotation.Filters;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.filter.CheckSession;

@IocBean //与 @IocBy有很大关系     声明为Ioc容器中的一个Bean
@At("/user")// 整个模块的路径前缀
//@Ok("json")
@Ok("json:{locked:'password|salt',ignoreNull:true}")// 忽略password和salt属性,忽略空属性的json输出,使密码和salt不发送到浏览器去
@Fail("http:500")// 抛异常的话,走500页面
@Filters(@By(type=CheckSession.class, args={"me", "/"}))//含义是,如果当前Session没有带me这个attr(属性),就跳转到/页面,即首页.
public class UserModule {

	@Inject// 此处的注入,有@IocBean,它才会生效    注入同名的一个ioc对象
	protected Dao dao;
	
//	@At//count方法, 测试用
//	public int count(){
//		return dao.count(User.class);
//	}
	
	@At//登录
	@Filters()//覆盖UserModule类的@Filter设置,因为登陆可不能要求是个已经登陆的Session,所以必须为login方法设置为空的过滤器,不然就没法登陆了
	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//添加user
	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.setCreateTime(new Date());
		user.setUpdateTime(new Date());
		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);
	}
	
	@At// 删除
    public Object delete(@Param("id")int id, @Attr("me")int me) {// @Attr是取Session/Request中的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;// 默认分页是第一页,每页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;//即最后返回null的话,是符合校验添加的
	}
}

就是这里面的增删改在返回值时,用到了NutMap().setv()的方法,有点看不懂

那是返回值, 跟数据库操作没关系.

@Ok("json:.....") // 把返回值转义为json, 作为相应的内容

return re.setv("ok", true).setv("data", user);
添加回复
请先登陆
回到顶部