spring自定义标签和验证(validator)

spring自定义标签(spring JSTL)

需要用到spring的标签库文件spring.tld,在spring-framwork里可以找到,同时需要
jstl-1.2.jar和standard-1.1.2.jar两个jar包

spring.tld放入/WEB-INF/tld/目录,
jstl-1.2.jar和standard-1.1.2.jar放入/WEB-INF/lib目录

web.xml增加配置如下
<!-- 自定义标签 -->
  <jsp-config>
  	<taglib>
  		<taglib-uri>/spring</taglib-uri>
  		<taglib-location>/WEB-INF/tld/spring.tld</taglib-location>
  	</taglib>
  </jsp-config>
jsp页面写法注意事项:
<1>第一行需要加入spring的标签库 <% @taglib uri = "/spring" prefix = "spring" %>
<2>spring:bind path提供一个绑定路径指向到某个类的某个属性
path="command.username"  command为spring配置文件里的  commandName属性,如下配置则可以写成 user.username
如果不配置,默认为command
<bean id="login" class="com.gc.action.Login">
		<property name="commandClass">
			<value>com.gc.action.User</value>
		</property>
		<!-- 指定验证类 -->
		<property name="validator">
			<ref bean="userValidator"/>
		</property>
		<!-- 指定验证失败要返回的页面 -->
		<property name="formView">
			<value>login</value>
		</property>
		
		<property name="successView">
			<value>success</value>
		</property>
		<!-- 不配,默认为 command
		<property name="commandName">  
        	<value>user</value>
    	</property> 
    	-->
	</bean>
<3> status相关
${status.expression}----------------------属性名
${status.value}----------------------------属性值
${status.errorMessage}------------------ errors. rejectValue的返回信息
<%@taglib uri="/spring" prefix="spring"%>
<%@page language="java" import="java.util.*" 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">
<title>Insert title here</title>
</head>
<body>
	<form action="login.do" method="post">
		<spring:bind path="command.username">
			输入用户名:<input type="text" name="${status.expression}" value="${status.value}"/><br>
			<font color="red"><b>${status.errorMessage}</b></font><br>
		</spring:bind>
		<spring:bind path="command.password">
			输入密码:<input type="password" name="${status.expression}" value="${status.value}"/><br>
			<font color="red"><b>${status.errorMessage}</b></font><br>
		</spring:bind>
		<spring:bind path="command.password2">
			确认密码:<input type="password" name="${status.expression}" value="${status.value}"/><br>
			<font color="red"><b>${status.errorMessage}</b></font><br>
		</spring:bind>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>

验证器(validator)

验证器需要实现org.springframework.validation.Validator接口
代码如下:
package com.gc.action;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class UserValidator implements Validator {
	private Logger logger=Logger.getLogger(this.getClass().getName());
	@Override
	public boolean supports(Class clazz) {
		// TODO Auto-generated method stub
		return clazz.equals(User.class);
	}
	
	@Override
	public void validate(Object obj, Errors errors) {
		// TODO Auto-generated method stub
		User user=(User)obj;
		logger.log(Level.DEBUG, "-----------------------------------------");
		logger.log(Level.DEBUG, "UserValidator");
		logger.log(Level.DEBUG, "getUsername:"+user.getUsername());
		logger.log(Level.DEBUG, "getPassword:"+user.getPassword());
		logger.log(Level.DEBUG, "getPassword2:"+user.getPassword2());
		logger.log(Level.DEBUG, "-----------------------------------------");
		
		if(!"gf".equals(user.getUsername())){
			errors.rejectValue("username", "", null, "用户名不正确");
		}
		
		if(!"123456".equals(user.getPassword())){
			errors.rejectValue("password", "", null, "密码不正确");
		}
		if(!user.getPassword2().equals(user.getPassword())){
			errors.rejectValue("password2", "", null, "2次输入的密码不一致");
		}
	}
}


在spring配置文件中加入bean配置

<bean id="userValidator" class="com.gc.action.UserValidator"/>

在spring配置文件中对应action的property name="validator"属性

<bean id="login" class="com.gc.action.Login">
		<property name="commandClass">
			<value>com.gc.action.User</value>
		</property>
		<!-- 指定验证类 -->
		<property name="validator">
			<ref bean="userValidator"/>
		</property>
		<!-- 指定验证失败要返回的页面 -->
		<property name="formView">
			<value>login</value>
		</property>
		
		<property name="successView">
			<value>success</value>
		</property>
		<!-- 不配,默认为 command
		<property name="commandName">  
        	<value>user</value>
    	</property> 
    	-->
	</bean>

注意事项:
由于采用了spring的jstl,在开始访问页面时需要用 *.do来访问相应jsp页面
spring:bind未成功, spring拼写错误写成了srping,搞了几天,愣是没看出拼写错误,注意检查拼写,IDE没有拼写检查:(





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值