您的位置:首页 > 编程语言 > Java开发

SpringMVC入门之七:使用JSP作为视图

2017-02-23 12:36 330 查看

使用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视图定义布局
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: