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没有拼写检查:(