用户唯一性的校验

用户唯一性的校验,要确定用户校验的时机。要在用户添加或者修改完之后,立刻发送ajax请求,校验。

用户校验分两种情况,一种是新添加用户,直接判断是否存在该用户名即可。

                二种是编辑用户,首先用户是存在的,在校验的时候,要排除自己然后校验。

用到的hql语句:

public List<User> verify(String account, String id) {
		String sb = "FROM User WHERE account = ?";
		if (StringUtils.isNotBlank(id)) {
			sb += " and id != ?";
		}
		Query query = getSession().createQuery(sb);
		query.setParameter(0, account);
		if (StringUtils.isNotBlank(id)) {
			query.setParameter(1, id);
		}
		//query.list();//查询
		return query.list();
	}

使用ajax校验

var falgs = false;
    function doVerify(){
    	
    	//1.获取账号值
    	var account = $("#account").val();
    	//
    	if(account != ""){
    		//2.使用ajax获取
    		$.ajax({
    			url:"${basePath}nsfw/user_verify.action",
    			type:"post",
    			async:false,//同步获取   根据需求
    			data:{"user.account":account,"user.id":"${user.id}"},//EL表达式要放在双引号内,,,,注意
    			success:function(msg){
    				 //alert(msg);
    				if("true" != msg){
    					
    					falgs = true;//这个是没重复的
    					
    				}else{
    					
    					alert("账号已经存在,请重新输入别的账号");
    					$("#account").focus();
    					falgs = false;
    					
    				}
    				
    				
    			}
    			
    			
    		});
    		
    		/* $.ajax({
				url:"${basePath}nsfw/user_verifyAccount.action",
				data: {"user.account": account},
				type: "post",
				async: false,//非异步
				success: function(msg){
					if("true" != msg){
						//帐号已经存在
						alert("帐号已经存在。请使用其它帐号!");
						//定焦
						$("#account").focus();
						vResult = false;
					} else {
						vResult = true;
					}
				}
			}); */
    		
    		
    	}
    	
    }
    
    function doSubmit(){
    	//判断是否为空
    	
    	var name = $("#name").val();
    	if(name == ""){
    		alert("请输入姓名");
    		$("#name").focus();
    		return false;
    	}
    	
    	var account = $("#account").val();
    	if(account == ""){
    		alert("请输入账号");
    		$("#account").focus();
    		return false;
    	}
    	
    	
    	var passwd = $("#passwd").val();
    	if(passwd == ""){
    		alert("请输入密码");
    		$("#passwd").focus();
    		return false;
    	}
    	
    	doVerify();
    	
    	if(falgs){
    		
    		document.forms[0].submit();
    	}
    	
    	
    }
    
    
    </script>


action层设置返回的信息的类型:


public void verify(){
		//查询用户是否存在
		try {
			String msg = "false";
			List<User> verify = userService.verify(user.getAccount(),user.getId());
			if(verify.size()>0 && verify != null){
				msg = "true";//有重复deweitrue
				HttpServletResponse response = ServletActionContext.getResponse();
				response.setContentType("text/html");
				ServletOutputStream outputStream = response.getOutputStream();
				outputStream.write(msg.getBytes());
				outputStream.flush();
				outputStream.close();
			}
			
			
			
			//输出
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}





### Jeecg 中实现字段唯一性校验 在 Jeecg 框架中,可以通过多种方式来确保数据库中的字段具有唯一性。以下是几种常见的方法及其具体实施: #### 方法一:通过前端验证 为了提高用户体验并减少不必要的服务器请求,在提交数据之前可以在前端进行初步的唯一性检查。 ```javascript // 前端 Vue.js 组件部分逻辑展示 export default { data() { return { rules: { code: [ { required: true, message: '请输入编码', trigger: 'blur' }, { validator: validateCodeUnique, trigger: 'blur' } // 自定义验证器用于检验唯一性 ] } }; }, methods: { async validateCodeUnique(rule, value, callback) { try { const res = await this.$http.get('/api/check/code/unique?code=' + value); if (!res.data.unique) { callback(new Error('该编码已存在')); } else { callback(); } } catch (error) { console.error(error); callback(new Error('验证失败,请稍后再试')); } } } } ``` 此段代码展示了如何设置 `rules` 属性下的自定义验证函数 `validateCodeUnique` 来调用后端 API 接口完成编码唯一性的实时检测[^1]。 #### 方法二:利用 JPA 注解配置实体类属性上的唯一约束条件 对于基于 Java 开发的服务端应用而言,可以借助于 Hibernate 或者其他 ORM 工具所提供的功能直接在模型层面上声明特定列不允许重复存储相同的数据值。 ```java @Entity @Table(name="users", uniqueConstraints={@UniqueConstraint(columnNames={"email"})}) public class User { @Id private Long id; @Column(nullable=false, length=60) private String email; ... } ``` 上述例子说明了怎样运用 `@Table(uniqueConstraints=@UniqueConstraint())` 和 `@Column()` 这两个注释标记指定某张表内某一列应当保持独一无二的状态[^3]。 #### 方法三:服务端业务逻辑层面处理 除了依靠框架特性外,还可以编写专门针对某些特殊场景下执行额外判断逻辑的服务程序片段来进行更细粒度控制。 ```java @Service public class UserServiceImpl implements UserService { @Autowired UserRepository userRepository; public boolean checkEmailExists(String email){ Optional<User> userOptional = userRepository.findByEmail(email); return !userOptional.isPresent(); } @Override public void registerUser(User newUser)throws Exception{ if(!checkEmailExists(newUser.getEmail())){ throw new RuntimeException("邮箱已被占用"); } userRepository.save(newUser); } } ``` 这段示例体现了当注册新用户时先查询是否存在相同的电子邮件地址再决定是否继续保存操作的过程[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值