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

本文介绍了如何在SpringMVC中使用JSP作为视图,重点讲解了InternalResourceViewResolver配置,以及Spring的JSP标签库在表单绑定和错误展现上的应用。通过标签库,可以方便地将表单绑定到模型对象,展示错误信息,并自定义错误消息,提供更好的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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视图定义布局

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值