SpringMVC入门之七:使用JSP作为视图
2017-02-23 12:36
423 查看
使用JSP作为视图
JSP作为JavaWeb应用程序的视图技术已经超过15年了,想在仍然是使用量最大的视图技术。视图解析器:
InternalResourceViewResolver是最简单和最常用的JSP视图解析器。这种视图解析器遵循一种约定,会在视图名上添加前缀和后缀,进而确定一个Web应用中视图资源的物理路径。
视图位置 在通常的Web应用中,我们把JSP文件放到Web应用的WEB-INF目录下,防止对它的直接访问。
InternalResourceViewResolver视图解析器的配置:
基于Java的配置:@Bean public ViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResovler.setSuffix(".jsp"); return viewResolver; }
基于XML的配置:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
这样,books/detail将会解析为“/WEB-INF/views/books/detail.jsp”。注意,当逻辑视图包含斜线时,这个斜线也会带到资源的路径名中。这样,我们可以很方便地将视图模板组织为层级目录结构,而不是将它们都放到同一个目录中。
使用Spring的JSP库
标签库是为JSP添加功能的强大方式,能够避免在脚本块中直接编写Java代码。Spring提供了两个JSP标签库,用来帮助定义SpringMVC Web的视图。其中一个标签库会用来渲染HTML表单标签,这些标签可以绑定model中的某个属性。另外一个标签库包含了一些工具类标签,我们随时都可以非常便利地使用它们。在这两个标签库汇中,表单绑定的标签库更加有用。将表单绑定到模型上
Spring的表单绑定JSP标签库包含了14个标签,它们中的大多数都用来渲染HTML中的表单标签。但是,它们与原生HTML标签的区别在于它们会绑定模型中的一个对象,能够根据模型中对象的属性填充值。标签库中还包含了一个为用户展现错误的标签,它会将错误信息渲染到最终的HTML之中。为了使用表单绑定库,需要在JSP中对其进行声明:<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
上面我们将前缀设置为了“sf”,它是Spring form的简写,也可以设置成其他的字符,如“form”。这14个标签及介绍如下:
以一个简单的注册为例,使用相应标签库的注册表单如下所示:
<sf:form method="POST" commandName="spitter"> First Name:<sf:input path="firstName"/><br/> Last Name:<sf:input path="lastName"/><br/> Email:<sf:input path="email"/><br/> User Name:<sf:input path="username"/><br/> Password:<sf:password path="password"/><br/> <input tupe="submit" value="Register" /> </sf:form>
<sf:form>会渲染一个HTML
<form>标签,但它也会通过commandName属性构建针对某个模型对象的上下文信息。在其他的表单绑定标签中,会引用这个模型对象的属性。在上面的例子中,我们将commandName属性设置为spitter。因此,在模型中必须要有一个key为spitter的对象,否则的话,表单不能正确渲染(会出现JSP错误)。我们在上面设置了path属性,
<input>标签的value属性值将会设置为模型对象中path属性所对应的值。
另外,值得注意的是,从Spring3.1开始,
<sf:input>标签能够允许我们制定type属性,这样的话,除了其他可选得类型外,还能制定HTML5特定类型的文本域,如data、range和email。例如:
Email:<sf:input path="email" type="email" /><br/>
相对于标准的HTML标签,使用Spring的表单绑定标签能够带来一定的功能提升,在校验失败后,表单中会预先填充之前输入的值。但是,这依然没有告诉用户错在什么地方。为了知道用户矫正错误,我们需要使用
<sf:errors>。
展现错误
<sf:form method="POST" commandName="spitter"> First Name:<sf:input path="firstName" /> <sf:errors path="firstName" /><br/> ... </sf:form>
标签
<sf:errors>渲染了校验错误后的提示信息,如果firstName属性没有错误的话,那么
<sf:errors>不会渲染任何内容。但如果有校验错误的话,那么它将会在一个HTML
<span>标签中显示错误信息。例如,如果用户提交的姓名为字母“J”的话,那么如下的HTML片段就是针对First Name输入域所显示的内容:
First Name:<input id="firstName" name="firstName" type="text" value="J" /> <span id="firstName.errors">size must be between 2 and 30</span>
现在已经能够提示错误信息了,但是我们可以更进一步,修改错误的样式,使其更加显眼。为了做到这一点,可以设置cssClass属性:
<sf:form method="POST" commandName="spitter"> First Name:<sf:input path="firstName" /> <sf:errors path="firstName" cssClass="error" /><br/> ... </sf:form>
只需要在样式文件中简单地设置:
span.error{ color:red; }
那么当出现校验错误时,会有红色的提示信息出现。显然,这样的表单才更加的用户友好。
此外,还有一个重要的属性:cssErrorClass。这个属性可以设置在
<sf:label>、<sf:input>等标签中。如:
<sf:input path="firstName" cssErrorClass="error" />
当error的样式为:
input.errer{ background-color:#ffcccc; }
且firstName域的校验出错时,该输入框的背景将会被设置为淡红色,这样的提示效果更好。
自定义错误信息
现在我们已经有了很好的方式为用户展现错误信息。不过,我们还能够让这些错误信息更加易读。重新修改一下Spitter类就可以达到效果了:@NotNull @Size(min=5,max=16,message="{username.size}") private String username; ...
对于上面每个域,我们都将其@Size注解的message设置为一个字符串,这个字符串是用大括号括起来的。如果没有大括号的话,massage中的值将会作为展现给用户的错误信息。但是使用了大括号之后,我们使用的就是属性文件中的某一个属性,该属性包含了实际的信息。接下来需要做的就是创建一个名为ValidationMessages.properties的文件,并将其放在根类路径之下:
firstName.size= First name must be between {min} and {max} characters long. lastName.size= First name must be between {min} and {max} characters long. ...
ValidationMessages.properties文件中每条信息的key值对应于注解中message属性占位符的值。同时,最小和最大长度也没有硬编码在文件中,在这个用户友好的信息中也有自己的占位符——{min}和{max}——他们会引用@Size注解上所设置的min和max属性。
将这些错误信息抽取到属性文件中还会带来一个好处,那就是我们可以创建地域相关的配置文件,为用户展现特定地域的特定语言。
上一篇:SpringMVC入门之六:使用Thymeleaf作为视图
下一篇:SpringMVC入门之八:使用Apache Tiles视图定义布局
相关文章推荐
- SpringMVC入门之六:使用Thymeleaf作为视图
- SpringMVC入门之八:使用Apache Tiles视图定义布局
- spring-boot入门(二)使用JSP视图
- 【Freemarker】SpringMVC使用Freemarker作为视图解析
- 使用jsp作为视图模板&常规部署
- SSM框架之关于使用JSP作为视图展示问题解决方案
- 如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好
- SpringBoot使用JSP作为视图模板的方法
- 使用jsp作为视图模板&常规部署
- SpringBoot使用JSP作为视图模板
- JSP开发入门(一)--安装好你的机器来使用JSP
- JSTL 入门: 表达式语言 ------通过避免使用脚本编制元素来简化对 JSP 应用程序的软件维护
- 使用 NetBeans IDE 5.0开发JSP快速入门
- 使用eclipse在jsp上显示水晶报表(七)用sql 命令对象作为数据源1
- 教学思路SQL之入门习题《学生成绩》 五、使用视图完成多表查询
- JSP页面中使用fckeditor控件入门
- 教学思路SQL之入门习题《学生成绩》 五、使用视图完成多表查询
- JSP培训(6)——使用Servlet作为控制器实现MVC模式
- JSP入门初级教程之Session的使用
- velocity基础教程--3用velocity代替jsp作为程序视图展示