精华内容
下载资源
问答
  • 结合实例,详细讲述了如何制作一个带参数自定义标签
  • 有没有和我一样,遇到自定义带参数标签时出错,要么报Unable to compile class for JSP,要么就报:ClassNotFoundException: org.apache.jsp.presenttag_jsp,但是在同一工程下不带参数的另一个标签却可以用。...
  • 参数自定义标签,比较简单的哦
  • 发现单纯的无属性自定义标签不能满足我们,如果可以在标签从加入我们需要的属性那么这样的话会更发方便了,可以根据我需要的什么参数直接传到指定的类展现我需要的内容,下面介绍属性的taglib如何定义. Java代码: ...

    上次介绍了简单的taglib自定义标签,发现单纯的无属性自定义标签不能满足我们,如果可以在标签从加入我们需要的属性那么这样的话会更发方便了,可以根据我需要的什么参数直接传到指定的类展现我需要的内容,下面介绍带属性的taglib如何定义.

    Java代码:

    public class FieldTag extends TagSupport {
    	private static final long serialVersionUID = -3282476920723218742L;
    	private String field;
    	private Integer count;
    
    	public final String getField() {
    		return field;
    	}
    
    	public final void setField(String field) {
    		this.field = field;
    	}
    	
    	public final Integer getCount() {
    		return count;
    	}
    
    	public final void setCount(Integer count) {
    		this.count = count;
    	}
    
    	@Override
    	public int doEndTag() throws JspException {
    
    		try {
    			JspWriter out = pageContext.getOut();
    			out.print(field);
    			out.print(count);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return super.doEndTag();
    	}
    }

    tld如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    	version="2.0">
    	<tlib-version>1.0</tlib-version>
    	<short-name>mytaglib</short-name>
    	<!-- 定义该标签库的URI 必须可以空-->
    	<uri></uri>
    	<!-- 定义第一个标签 -->
    	<tag>
    		<!-- 定义标签名 -->
    		<name>field</name>
    		<!-- 定义标签处理类 -->
    		<tag-class>org.lxh.taglib.FieldTag</tag-class>
    		<!-- 定义标签体为空 -->
    		<body-content>empty</body-content>
    		<attribute>
    			<name>field</name>
    			<required>true</required> 
    			<rtexprvalue>true</rtexprvalue>
    		</attribute>
    		<attribute>
    			<name>count</name>
    			<rtexprvalue>true</rtexprvalue>
    			<retuired>true</retuired>
    		</attribute>
    	</tag>
    </taglib>

     

    编写带属性标签的时候需要注意以下几点:

    一:每个定义好的属性必须写getset方法,如果不写getset的话会报错说当前taglib没有setter方法

    二:每个定义的属性名称必须跟<attribute>标签中的<name>标签名称一致.

    三:在<attribute>标签中参数如下<rtexprvalue>表示是否接受jsp语法或者el语言或其他动态语言,默认false.

    四:每个标签属性是根据用户自定义的属性,也就是说定义一个值的时候为String的他就不能输入int等其他类型,否则就会报错.

    jsp:如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib prefix="tf" uri="/WEB-INF/tld/testfield.tld" %>
    <!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>
    <%
    	Integer a = 10;
    %>
    <tf:field field="hi" count="<%=a%>"/>
    </body>
    </html>
    展开全文
  • 自定义标签可以定义一个或多个属性,这样,在JSP页面中应用自定义标签时就可以设置这些属性的值,通过这些属性为标签处理器传递参数信息,从而提高标签的灵活性和复用性。 记得我们之前写的让一段标签体循环5次,...
    我们之前了解了传统标签开发和简单标签开发,但是我们开发的标签都是没有属性的标签,我们接下来里了解一下带属性的标签的开发。
    开发带属性的标签:
    自定义标签可以定义一个或多个属性,这样,在JSP页面中应用自定义标签时就可以设置这些属性的值,通过这些属性为标签处理器传递参数信息,从而提高标签的灵活性和复用性。

    记得我们之前写的让一段标签体循环5次,那么我们能不能在标签中设置一个属性,动态的设置循环的次数呢?当然是可以的,类似于:
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib uri="/simpleTag" prefix="zyg2" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>带属性的标签</title>
      </head>
      
      <body> 
          <zyg2:repeat count="8"> 
      	  10Hello !  
          </zyg2:repeat> 
      </body>
      
    </html>

    想要让一个自定义标签带有属性,通常需要完成两个任务:
    (1)在标签处理器中编写每个属性对应的setter方法。
    (2)在TLD文件中描述标签的属性。

    为自定义标签定义属性时,每个属性都必须按照JavaBean的属性命名方式,在标签处理器中定义属性名对应的setter方法,用来接收JSP页面中调用自定义标签时传递进来的属性值。例如属性url,在标签处理器类中就要定义相应的setUrl(Strung url)方法。

    在标签处理器中定义相应的set方法后,JSP引擎在解析执行开始标签之前,也就是调用doStartTag方法前,会调用set属性方法,为标签设置属性。

    下面我们来完成<zyg2:repeat count="8">标签的开发,作为例子。
    首先创建一个标签处理器类:

    然后编写该类,将参数作为类中的参数,并设置set方法:
    package org.zyg.web.simpletag;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class RepeatWithParSimpleTag extends SimpleTagSupport {
    	private int count;
    	
    	public void setCount(int count) {
    		this.count = count;
    	}
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		JspFragment jf=this.getJspBody();
    		for (int i = 0; i < count; i++) {
    			jf.invoke(this.getJspContext().getOut());
    		}
    	}
    }

    然后在zygSimple.tld中注册这个标签(以前的repeat注释掉,以免冲突):
    <tag>
        <name>repeat</name><!-- 标签名 -->
    	<tag-class>org.zyg.web.simpletag.RepeatWithParSimpleTag</tag-class>
    	<body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
    
    
    	<attribute>
    		<name>count</name>
    		<required>true</required>
    		<!--rtexprvalue设定是否接受运行时表达式(EL表达式或其他代码)  -->
    		<rtexprvalue>true</rtexprvalue>
    	</attribute>
    </tag>

    然后前台页面就如刚刚那么写:
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib uri="/simpleTag" prefix="zyg2" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>带属性的标签</title>
      </head>
      
      <body> 
          <zyg2:repeat count="8"> 
      	  Hello !  
          </zyg2:repeat> 
      </body>
      
    </html>

    重启Web项目,访问页面测试:


    我们将count改为4,结果:

    所以我们的带属性的标签开发成功!

    我们之前说过,tld配置文件中rtexprvalue设定是否接受运行时表达式,我们来测试一下,我们在repeat中在设置一个属性,里面传输的是date日期:
    <zyg2:repeat count="4" date="<%=new Date() %>"> 
      Hello !  
    </zyg2:repeat> 
    可以看到,我们的date属性中放置的正是运行时语句(在编译时才会体现真正值),这里我们的rtexprvalue设置的是true,所以我们可以得到它:
    package org.zyg.web.simpletag;
    
    import java.io.IOException;
    import java.util.Date;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class RepeatWithParSimpleTag extends SimpleTagSupport {
    	private int count;
    	
    	public void setCount(int count) {
    		this.count = count;
    	}
    	
    	private Date date;
    	
    	public void setDate(Date date) {
    		this.date = date;
    	}
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		JspFragment jf=this.getJspBody();
    		this.getJspContext().getOut().write(date.toLocaleString()+"<br/>");
    		for (int i = 0; i < count; i++) {
    			jf.invoke(this.getJspContext().getOut());
    		}
    	}
    }

    然后在tld中设置:
    <tag>
        <name>repeat</name><!-- 标签名 -->
    	<tag-class>org.zyg.web.simpletag.RepeatWithParSimpleTag</tag-class>
    	<body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
    
    
    	<attribute>
    		<name>count</name>
    		<required>true</required>
    		<rtexprvalue>true</rtexprvalue>
    	</attribute>
    	
    	<attribute>
    		<name>date</name>
    		<required>true</required>
    		<rtexprvalue>true</rtexprvalue>
    	</attribute>
    </tag>
    

    然后重启Web项目,访问该页面:

    发现我们是可以接受运行时语句作为参数的,如果我们的rtexprvalue设置的是false,那么我们上面那种参数设置就会报错。

    注:tld配置文件的attribute属性下还有一个type标签,定义的是属性的java类型。

    转载请注明出处:http://blog.csdn.net/acmman/article/details/51118897

    展开全文
  • varargin 输入参数允许用户选择性地自定义数据提示标签。 为了示例 X 和 Y 值标签可以替换为更具描述性的内容,例如“时间”和'加速'。 除了轴标签和使用图例时,标题标签可以添加到数据提示。 标题添加在轴标签...
  • 1、SpringMVC标签库2、自定义参数转换器WebDataBinder3、(conversionService )自定义String到java.util.Date类型转换器4、(Validate)较验器----参数的有效性验证Validate----Hibernate(JSR303)5、(bindingResult)...

    1SpringMVC标签库

    2、自定义参数转换器WebDataBinder

    3(conversionService )自定义Stringjava.util.Date类型转换器

    4(Validate)较验器----参数的有效性验证Validate----Hibernate(JSR303)

    5(bindingResult)自定义错误信息的回显


    1SpringMVC标签库*用的不多*

    1、搭建SpringMVC开发环境

    导入springmvc所需要的jar

    commons-logging-1.1.3.jar

    log4j-1.2.17.jar

    spring-aop-4.0.0.RELEASE.jar

    spring-beans-4.0.0.RELEASE.jar

    spring-context-4.0.0.RELEASE.jar

    spring-core-4.0.0.RELEASE.jar

    spring-expression-4.0.0.RELEASE.jar

    spring-web-4.0.0.RELEASE.jar

    spring-webmvc-4.0.0.RELEASE.jar

     

    配置配置文件:

     

    log4j.properties


    # Global logging configuration
    log4j.rootLogger=INFO, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    Springmvc配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:mvc="http://www.springframework.org/schema/mvc"
    	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
    	<context:component-scan base-package="com.tcent"></context:component-scan>
    	<bean
    		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<property name="prefix" value="/jsp/"></property>
    		<property name="suffix" value=".jsp"></property>
    	</bean>
    	<mvc:annotation-driven></mvc:annotation-driven>
    	<mvc:default-servlet-handler />
    
    </beans>

    web.xml中的配置内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    	id="WebApp_ID" version="2.5">
    	<display-name>tag</display-name>
    	
    	<!-- 解决中文乱码的filter -->
    	<filter>
    		<filter-name>CharacterEncodingFilter</filter-name>
    		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    		<init-param>
    			<param-name>encoding</param-name>
    			<param-value>UTF-8</param-value>
    		</init-param>
    		<init-param>
    			<param-name>forceEncoding</param-name>
    			<param-value>true</param-value>
    		</init-param>
    	</filter>
    	<filter-mapping>
    		<filter-name>CharacterEncodingFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    	<!-- 支持restful风格的filter -->
    	<filter>
    		<filter-name>HiddenHttpMethodFilter</filter-name>
    		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>HiddenHttpMethodFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    	
    	
    	<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
    	<servlet>
    		<servlet-name>springDispatcherServlet</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>classpath:springmvc.xml</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    
    	<!-- Map all requests to the DispatcherServlet for handling -->
    	<servlet-mapping>
    		<servlet-name>springDispatcherServlet</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    	
    	<welcome-file-list>
    		<welcome-file>index.html</welcome-file>
    		<welcome-file>index.htm</welcome-file>
    		<welcome-file>index.jsp</welcome-file>
    		<welcome-file>default.html</welcome-file>
    		<welcome-file>default.htm</welcome-file>
    		<welcome-file>default.jsp</welcome-file>
    	</welcome-file-list>
    </web-app>

    2、创建对象模型Person对象

    public class Person {
    	private Integer id;
    	private String name;
    	private Date birthDate;
    	private String email;
    	private BigDecimal salary;

    3、在webContent下创建jsp页面

    springMVC的标签form标签可以关联Request域中bean对象

    method="delete" 此时的methodcrudrestful风格,可以增删改查

    addPerson.jsp页面:

    <body>
    		<!-- 
    			springMVC的标签form标签可以关联Request域中bean对象
    			我们在隐含模型中保存的key值。也一定要跟form:form标签中的modelAttribute值对应上。
    		 -->
    		这里是添加用户页面
    		<form:form action="${ pageContext.request.contextPath }/addPerson" method="delete" 
    			modelAttribute="person">
    		name:<form:input path="name"/><br/>
    <%-- 		birthDate:<form:input path="birthDate"/><br/> --%>
    		email:<form:input path="email"/><br/>
    		salary:<form:input path="salary"/><br/>	
    		<input type="submit" />		
    		</form:form>
    	</body>

    4、创建PersonController控制器

    隐含模型中必须要有一个form标签对应的pojo对象

    @Controller
    public class PersonController {
    
    	@RequestMapping(value = "/toAddPerson")
    	public String toAddPerson(Map<String, Object> map) {
    		System.out.println("经过toAddPerson方法");
    		// 隐含模型中必须要有一个form标签对应的pojo对象
    		map.put("person", new Person(12, "wzg168", null, "wzg168@qq.com",
    				new BigDecimal(30000)));
    
    		return "addPerson";
    	}
    
    	@RequestMapping(value = "/addPerson")
    	public String addPerson(Person person) {
    		System.out.println("添加用户【" + person + "】到数据库");
    		return "redirect:/index.jsp";
    	}
    
    }

    2、自定义参数转换器WebDataBinder

    2.1WebDataBinder类介绍

    SpringMVC中有WebDataBinder类。这个类专门用来负责将请求参数类型转换。以及请求参数数据验证错误信息绑定等功能。

    WebDataBinder类中有三个组件分别处理三种不同的功能。

    (1)conversionService 负责处理参数类型转换。把请求的参数转换成为Controller中的方法参数值。

    converters接口:ConversionService组件中需要各种类型转换器,在conversionService组件中需要依赖于各种转换器类去实现转换工作。

    (2)validators 负责验证传入的参数值是否合法。

    (3)bindingResult 负责接收验证后的错误信息。

    下图展示了WebDataBinderConversionServiceConverter的关系。



    如果我们要自定义请求参数的类型转换器。需要实现org.springframework.core.convert.converter.Converter<S,T>接口。

    然后注入到ConversionService组件中。最后再将ConversionService注入到WebDataBinder中。创建ConversionService组件,需要配置:

    org.springframework.format.support.FormattingConversionServiceFactoryBean对象。

    3(conversionService )自定义Stringjava.util.Date类型转换器

    方法一:Stringjava.util.Date转换


    /**
     * 自定义 String转换成为java.util.Date类
     *
     */
    public class MyStringToDateConverter implements Converter<String, Date> {
    	// 字符串和日期类型相互转换的工具类
    	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	/**
    	 * convert就是转换器工作时调用的转换方法<br/>
    	 * 参数source就是客户端传递过来的值。
    	 */
    	@Override
    	public Date convert(String source) {
    		// 以下情况上null,无法转换
    		if (source == null) {
    			return null;
    		}
    		if (source != null && "".equals(source.trim())) {
    			return null;
    		}
    		
    		try {
    			// 将日期 字符串转换成为 java.util.Date类型
    			return sdf.parse(source);
    		} catch (ParseException e) {
    			e.printStackTrace();
    			throw new IllegalArgumentException("Invalid Date value '" + source + "'");
    		}
    	}
    
    }

    springmvc配置文件中做如下的配置:

    <!-- 配置FormattingConversionServiceFactoryBean去创建ConversionService组件,用于类型转换 -->
    	<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    		<!-- 将自己定义的各种Converter转换器。注入到ConversionService中 -->
    		<property name="converters">
    			<set>
    				<bean class="com.tcent.converter.MyStringToDateConverter" />
    			</set>
    		</property>
    	</bean>
    	
    	<!-- 静态资源的支持 -->
    	<mvc:default-servlet-handler/>
    	<!-- springmvc注解驱动 -->
    	<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

    最后再将ConversionService注入到WebDataBinder:通过mvc的注解驱动

    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

    3.1@DateTimeFormat注解类型转换器

    方法二:Stringjava.util.Date转换


    我们也可以像上面。在类的Date类型的属性上标上注解。就可以自动String类型转换成为Date数据

     

    pattern属性表示 日期的格式。最完成的格式是:yyyy-MM-dd hh:mm:ss

    yyyy表示年份必须是4

    MM 表示月份必须是2

    dd 表示日期必须是2

     

    hh 表示小时,必须是2

    mm 表示分钟,必须是2

    ss 表示秒钟,必须是2


    4(Validate)较验器----参数的有效性验证Validate----Hibernate

    JavaEE6.0中,定义了很多的验证规范。这些规范统称为:JSR303验证规范。

    而这些规范的实现。我们使用现在业内比较认可的Hibernate-Validate验证

     

    @AssertTrue

    用于boolean字段,该字段只能为true  

    @AssertFalse

    该字段的值只能为false

    @CreditCardNumber

    对信用卡号进行一个大致的验证

    @DecimalMax

    只能小于或等于该值

    @DecimalMin

    只能大于或等于该值

    @Digits(integer=,fraction=)

    检查是否是一种数字的整数、分数,小数位数的数字

    @Email

    检查是否是一个有效的email地址

    @Future

    检查该字段的日期是否是属于将来的日期

    @Length(min=,max=)

    检查所属的字段的长度是否在minmax之间,只能用于字符串

    @Max

    该字段的值只能小于或等于该值

    @Min

    该字段的值只能大于或等于该值

    @NotNull

    不能为null

    @NotBlank

    不能为空,检查时会将空格忽略

    @NotEmpty

    不能为空,这里的空是指空字符串

    @Null

    检查该字段为空

    @Past

    检查该字段的日期是在过去

    @Pattern(regex=,flag=)

    被注释的元素必须符合指定的正则表达式

    @Range(min=,max=,message=)

    被注释的元素必须在合适的范围内

    @Size(min=, max=)

    检查该字段的size是否在minmax之间,可以是字符串、数组、集合、Map

    @URL(protocol=,host,port)

    检查是否是一个有效的URL,如果提供了protocolhost等,则该URL还需满足提供的条件

     

    使用Hiberante的验证器较验数据分以下步骤:

    1、导入Hibernate验证的jar

    classmate-0.8.0.jar

    hibernate-validator-5.0.0.CR2.jar

    hibernate-validator-annotation-processor-5.0.0.CR2.jar

    jboss-logging-3.1.1.GA.jar

    validation-api-1.1.0.CR1.jar

     

    2、在实体bean对象的属性上使用较验的注解

    public class Person {
    	private Integer id;
    	/**
    	 * @NotNull表示验证当前name属性不能为null值<br/>
    	 * @Length(min = 5, max = 12)表示验证name属性最小5位,最大12位
    	 */
    	@NotNull
    	@Length(min = 5, max = 12)
    	private String name;
    	/**
    	 * @Past 表示日期的值必须是过去的时间
    	 */
    	@Past
    	@DateTimeFormat(pattern = "yyyy-MM-dd")
    	private Date birthDate;
    	/**
    	 * @Email 表示当前email属性必须是合法的邮箱格式
    	 */
    	@Email
    	private String email;
    	/**
    	 * @Max(value = 100) 表示当前salary的值不能大于100
    	 */
    	@Max(value = 100)
    	private BigDecimal salary;

    3、Controller的方法参数上,给需要验证的bean对象。添加验证注解@Valid,以及在验证对象后跟一个BindingResult 对象用于接收验证的错误信息

    /**
    	 * @Valid Person person=====@Valid表示要验证当前这个person对象的数据<br/>
    	 * BindingResult personBindingResult用来接收前面一个pojo对象验证的错误信息。
    	 */
    	@RequestMapping(value = "/addPerson")
    	public String addPerson(@Valid Person person,
    			BindingResult personBindingResult) {
    		// 判断输入的数据是否有错误,
    		if (personBindingResult.hasErrors()) {
    			System.out.println("*********************************************");
    			System.out.println( personBindingResult.getAllErrors() );
    			System.out.println("*********************************************");
    			return "addPerson";
    		}
    		System.out.println("添加用户【" + person + "】到数据库");
    		return "redirect:/index.jsp";
    	}

    4、SpringMVCform表单字段后,使用<form:errors path="字段名" />输出对应字段的错误信息

    <body>
    		<!-- 
    			springMVC的标签form标签可以关联Request域中bean对象
    			我们在隐含模型中保存的key值。也一定要跟form:form标签中的modelAttribute值对应上。
    		 -->
    		这里是添加用户页面
    		<form:form action="${ pageContext.request.contextPath }/addPerson" method="delete" 
    			modelAttribute="person">
    		name:<form:input path="name"/><form:errors path="name" /><br/>
    		birthDate:<form:input path="birthDate"/><form:errors path="birthDate" /><br/>
    		email:<form:input path="email"/><form:errors path="email" /><br/>
    		salary:<form:input path="salary"/><form:errors path="salary" /><br/>	
    		<input type="submit" />		
    		</form:form>
    	</body>

    5(bindingResult)自定义错误信息的回显

    5.1、错误消息规则:

    这是校验错误的key规则:

     

    格式1 Pattern.bean.property

    说明: 校验格式.隐含模型包.属性名

    示例:Email.person.email------------person对象的email属性验证Email格式失败

     

    格式2 Pattern.property

    说明: 校验格式.属性名

    示例:Email.email-----------任何对象的email属性验证Email格式失败

     

    格式3 Pattern.javaType

    说明: 校验格式.字段数据类型

    示例:Email.java.lang.String-----------任何String类型的属性验证Email格式失败

     

    key4 Pattern

    说明: 校验格式

    示例:Email-----------校验Email格式失败

     

     

    参数转换失败的key规则:

     

    格式1 typeMismatch.bean.property

    说明: 类型不匹配.隐含模型名.属性名

    示例:typeMismatch.person.birthDate-----------person对象的birthDate属性转换失败

     

    格式2 typeMismatch.property

    说明: 类型不匹配.属性名

    示例:typeMismach.birthDate-----------任何对象的birthDate属性转换失败

     

    格式3 typeMismatch.javaType

    说明: 类型不匹配.字段数据类型

    示例:typeMismach.java.util.Date ----------- Java.util.Date类型转换失败

     

    格式4 typeMismatch

    说明: 类型不匹配

    示例:typeMismach-----------字段类型转换失败

    5.2、在源码目录下配置错误信息的属性配置文件


    validate.properties属性配置文件的内容如下:

    Email.person.email=\u81EA\u5B9A\u4E49-\u90AE\u7BB1\u683C\u5F0F\u4E0D\u5408\u6CD5
    NotNull=\u81EA\u5B9A\u4E49-\u503C\u4E0D\u80FD\u4E3A\u7A7A
    Length.name=\u81EA\u5B9A\u4E49-\u957F\u5EA6\u5FC5\u987B\u4E3A 5 \u5230 12 \u4F4D
    Past=\u81EA\u5B9A\u4E49-\u65F6\u95F4\u5FC5\u987B\u662F\u8FC7\u53BB\u7684\u65F6\u95F4
    Max=\u81EA\u5B9A\u4E49-\u503C\u4E0D\u80FD\u5927\u4E8E 100
    typeMismatch=\u81EA\u5B9A\u4E49-\u4E0D\u8981\u968F\u4FBF\u8F93\u5165

    输入的汉字会立刻转换成16进制(有点小神秘~_`~)

     

    占位符的使用:

    {0}表示第一个传入的参数。 {0}第一个参数固定是验证的属性名

    Length.name=\u81EA\u5B9A\u4E49-\u957F\u5EA6\u5FC5\u987B\u4E3A {0} \u5230 12 \u4F4D
    Max=\u81EA\u5B9A\u4E49-\u503C\u4E0D\u80FD\u5927\u4E8E {0}

    5.3、在Spring中配置如下:

    <!-- 告诉Spring容器,去加载自定义的错误信息 -->
    	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    		<property name="basename" value="validate" />
    	</bean>


     SpringMVC详解三、Restful风格及基于Restful的CRUD

    Jar包下载


    展开全文
  • 发现单纯的无属性自定义标签不能满足我们,如果可以在标签从加入我们需要的属性那么这样的话会更发方便了,可以根据我需要的什么参数直接传到指定的类展现我需要的内容,下面介绍属性的taglib如何定义. Java代码: ...

    上次介绍了简单的taglib自定义标签,发现单纯的无属性自定义标签不能满足我们,如果可以在标签从加入我们需要的属性那么这样的话会更发方便了,可以根据我需要的什么参数直接传到指定的类展现我需要的内容,下面介绍带属性的taglib如何定义.

    Java代码:

    public class FieldTag extends TagSupport {
    	private static final long serialVersionUID = -3282476920723218742L;
    	private String field;
    	private Integer count;
    
    	public final String getField() {
    		return field;
    	}
    
    	public final void setField(String field) {
    		this.field = field;
    	}
    	
    	public final Integer getCount() {
    		return count;
    	}
    
    	public final void setCount(Integer count) {
    		this.count = count;
    	}
    
    	@Override
    	public int doEndTag() throws JspException {
    
    		try {
    			JspWriter out = pageContext.getOut();
    			out.print(field);
    			out.print(count);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return super.doEndTag();
    	}
    }

    tld如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    	version="2.0">
    	<tlib-version>1.0</tlib-version>
    	<short-name>mytaglib</short-name>
    	<!-- 定义该标签库的URI 必须可以空-->
    	<uri></uri>
    	<!-- 定义第一个标签 -->
    	<tag>
    		<!-- 定义标签名 -->
    		<name>field</name>
    		<!-- 定义标签处理类 -->
    		<tag-class>org.lxh.taglib.FieldTag</tag-class>
    		<!-- 定义标签体为空 -->
    		<body-content>empty</body-content>
    		<attribute>
    			<name>field</name>
    			<required>true</required> 
    			<rtexprvalue>true</rtexprvalue>
    		</attribute>
    		<attribute>
    			<name>count</name>
    			<rtexprvalue>true</rtexprvalue>
    			<retuired>true</retuired>
    		</attribute>
    	</tag>
    </taglib>

     

    编写带属性标签的时候需要注意以下几点:

    一:每个定义好的属性必须写getset方法,如果不写getset的话会报错说当前taglib没有setter方法

    二:每个定义的属性名称必须跟<attribute>标签中的<name>标签名称一致.

    三:在<attribute>标签中参数如下<rtexprvalue>表示是否接受jsp语法或者el语言或其他动态语言,默认false.

    四:每个标签属性是根据用户自定义的属性,也就是说定义一个值的时候为String的他就不能输入int等其他类型,否则就会报错.

    jsp:如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib prefix="tf" uri="/WEB-INF/tld/testfield.tld" %>
    <!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>
    <%
    	Integer a = 10;
    %>
    <tf:field field="hi" count="<%=a%>"/>
    </body>
    </html>
    结果如图: 
    展开全文
  • 标签代码实现类: package taglib; import java.io.IOException; import java.io.Writer; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; ...
  • 2 SiteWeaver6.6自定义标签调整与改进 2 2.1 改进函数标签参数传递的算法,兼容有逗号的参数. 2 2.2 增加自定义函数标签SQL语句的兼容性,兼容取出全部频道,全部栏目的情况 2 2.3 增强动态标签SQL语句的容错功能 3 ...
  • 老夫以前写的笔记,现做成PDF,共享出来 helloworld:自定义标签库制作.pdf 带参数的标签:自定义标签库制作(二).pdf
  • 自定义标签和过滤器 当django自带的一些标签不能满足我们项目的开发需求的时候,就需要自定标签或者过滤器了 自定义标签步骤如下, 过滤器和标签的引用 从上可以看出,自定义标签和过滤器整个流程基本一样,除了...
  • Java生成自定义控件源代码,颜色选择下拉框演示,图标下拉框的单元绘制器,从JLabel类扩展,实现ListCellRenderer接口,采用Object二维数组,用于初始化下拉框,参数依次为图标,显示文本,提示文本,初学者参考。
  • 要在模块内自定义标签,首先,这个模块必须包含一个名为register的变量,它是template.Library的一个实例 from django import template register = template.Library() 自定义模板过滤器 编写过滤器 自定义过滤器...
  • 自定义标签可以定义一个或多个属性,这样,在JSP页面中应用自定义标签时就可以设置这些属性的值,通过这些属性为标签处理器传递参数信息,从而提高标签的灵活性和复用性。 要想让一个自定义标签具有属性,通常需要...
  • 发现单纯的无属性自定义标签不能满足我们,如果可以在标签从加入我们需要的属性那么这样的话会更发方便了,可以根据我需要的什么参数直接传到指定的类展现我需要的内容,下面介绍属性的taglib如何定义. Java代码: ...
  • 一个函数的自定义标签就是不能带参数去得,原来是少了这么一句request.setAttribute("second_catalog",second_catalog);成功了!!!!发现web前端开发比我的ssh难开发多了,加油哦!!!!
  • 有时候开发需要自定义标签调用,才能满足我们的需求,...自定义标签可以直接在页面传入参数直接页面调用,则无需再通过后台调用!!!! 看了下thinkphp3.2.3的手册。发现如下删点: 第一点: 标签库请放置 ThinkP
  • 如题,要实现一个分页功能,其次,要让分页标签“智能一点”,在分页时能自动上url后面的参数 1 <tag> 2 <description>分页标签</description> 3 <name>paging</name> ...
  • element上传函数带参数自定义传参

    千次阅读 2020-04-15 15:48:24
    下面这是标签 可以看出来 :http-request="(params) =>beforeMasterPictureUpload(params,‘ruleForm’,fileList0)" http-request 传递参数的方法 是可以这样写的,其他方法一样,但是如果写错少些可能会导致覆盖...
  • Struts 框架有几个自定义标签库(有关 Struts 的更多信息的链接请参阅 参考资料 )。这些库中的一个标签可以创建一个支持改写 URL 的链接并用 jsessionid 对改写的连接编码。 不过有一个问题:如果希望传递一组...
  • 0概述-------------------------------------------------------------------------------- ...when标签设置条件语句-又一个参数 otherwise标签-无参数- 1choose父标签------------------------------------------
  • (转)掌握jsp自定义标签:(二)

    千次阅读 2004-07-30 23:26:00
    简单标签的例子 第 1 页(共9 页) Struts 框架有几个自定义标签库(有关 Struts 的更多信息的链接请参阅 参考资料 )。这些库中的一个标签可以创建一个支持改写 URL 的链接并用 jsessionid 对改写的连接编码。 ...
  • 自定义标签 简单标签 包含标签 自定义过滤器 自定义过滤器就是一个有一个或两个参数的Python 函数: - (输入的)变量的值 —— 不一定是字符串形式。 - 参数的值 —— 可以有一个初始值,或者...
  • [j2ee][自定义分页标签

    2013-01-11 09:45:06
    如果想在页面中显示分页效果,在jsp中写的代码太多,可读性不好,可以使用自定义标签来解决这个问题。 采用了两种方式 1.带参数的标签 2.直接从session中取对象的标签,其实本质都一样 1: 页面上分页后的效果...
  • 本文介绍一下笔者用到的两种方式:调用Ajax动态更新页面,或用自定义标签来初始化。 调用Ajax动态更新:  这是笔者使用的一种基本方式,也是主要方法。前端页面预留一个显示表格的区域或弹框,给用户提供一个触发点...
  • element-UI change 事件传递自定义参数

    千次阅读 2019-03-19 02:16:35
    背景:element 走马灯为例,自带一个回调函数 @change,我们无需添加参数,就能获取到目前激活的幻灯片的索引,原幻灯片的索引,那么我们如何传递自定义参数呢?解决方法:标签的 @change 事件:@change="((pre, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 609
精华内容 243
关键字:

自定义标签带参数