Spring实战(第四版)读书笔记17——JSP视图

1、配置适用于JSP的视图解析器

java配置例子:

@Bean
public ViewResolver viewResolver(){
    InternalResourceViewResolver resolver = 
        new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}

XML配置例子:

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/views/"
      p:suffix=".jsp" />

解析JSTL视图(将逻辑视图解析为JstlView)java配置例子:

@Bean
public ViewResolver viewResolver(){
    InternalResourceViewResolver resolver = 
        new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    resolver.setViewClass(
        org.springframework.web.servlet.view.JstlView.class);
    return resolver;
}

XML配置例子:

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/views/"
      p:suffix=".jsp" 
      p:viewClass="org.springframework.web.servlet.view.JstlView" />

2、使用Spring的JSP库

2.1、Spring表单绑定标签库(将模型与表单绑定)

使用表单绑定库,需要在JSP页面中进行声明:

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>

Spring表单绑定标签库中所包含的标签:

在注册JSP中使用标签的例子:

<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/>
    Username: <sf:input path="username" /><br/>
    Password: <sf:password path="password" /><br/>
    <input type="submit" value="Register" />
</sf:form>

通过commandName属性构建针对某个模型对象的上下文信息,其他表单绑定标签中,会引用这个模型对象的属性。<input>标签的value属性值将设为模型对象中path属性所对应的值。

<sf:form>标签允许指定type属性,例子:

Email: <sf:input path="email" type="email" /><br/>

相对于标准的HTML标签,Spring表单绑定标签在校验失败后,表单中会预先填充之前输入的值,Spring表单绑定标签将表单与模型绑定在了一起,并最终渲染为HTML。

使用<sf:errors>展现错误的例子:

<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;
}

将错误在同一个地方进行显示:

<sf:form method="POST" commandName="spitter">
    <sf:errors path="*" element="div" cssClass="errors" />
...
</sf:form>

着重显示需要修改的输入域:

<sf:form method="POST" commandName="spitter">
    <sf:label path="firstName"
        cssErrorClass="error">First Name</sf:label>:
    <sf:input path="firstName" cssErrorClass="error" /><br/>
...
</sf:form>
label.error{
    color:red;
}

input.error{
    background-color: #ffcccc;
}

 将错误信息抽取到属性文件:

@NotNull
	@Size(min=5, max=16, message="{username.size}")
	private String username;
username.size=
	Username must be between {min} and {max} characters long.

好处是可以通过创建任意数量的ValidationMessages.properties文件,涵盖想支持的所有语言和地域。

2.2、Spring通用标签库

使用通用标签库需要的声明:

<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

通用标签库中的标签:

将硬编码的欢迎信息替换为通过属性文件进行设置的形式:

<h1><s:message code="spitter.welcome" /></h1>

ResourceBundleMessageSource(实现了MessageSource接口)配置信息源:

@Bean
public MessageSource messageSource(){
    ResourceBundleMessageSource messageSource = 
            new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    return messageSource;
}

ResourceBundleMessageSource会从属性文件(根类路径下)中加载信息,这个信息文件时根据basename衍生而来的。

ReloadableResourceBundleMessageSource配置信息源:

@Bean
public MessageSource messageSource(){
    ReloadableResourceBundleMessageSource messageSource = 
            new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("file:///etc/spittr/messages");
    messageSource.setCacheSeconds(10);
    return messageSource;
}

这里basename属性可以设置为类路径下(以classpath:作为前缀)、文件系统中(以file:作为前缀)或Web应用路径下(没有前缀)查找属性。

<s:url>基本用法:

<a href="<s:url href="/spitter/register" />">Register</a>

<s:url>会接受一个相对于Servlet上下文的URL,并在渲染的时候预先添上Servlet上下文路径。

创建URL并赋值给一个变量:

<s:url href="/spitter/register" var="registerUrl" />
<a href="${registerUrl}">Register</a>

通过scope属性设置URL作用域:

<s:url href="/spitter/register" var="registerUrl" scope="request" />

在URL上添加参数:

<s:url href="/spittles" var="spittlesUrl">
    <s:param name="max" value="60" />
    <s:param name="max" vlaue="20" />
</s:url>

创建带有路径参数的URL:

<s:url href="/spitter/{username}" var="spitterUrl">
    <s:param name="username" value="jabber" />
</s:url>

URL转义(显示渲染结果但不作为超链接):

<s:url value="/spittles" htmlEscape="true">
    <s:param name="max" value="60" />
    <s:param name="count" value="20" />
<s:url>

如果要在JavaScript代码中使用URL:

<s:url value="/spittles" var="spittlesJSUrl" javaScriptEscape="true">
    <s:param name="max" value="60" />
    <s:param name="count" value="20" />
</s:url>
<script>
    var spittlesUrl="${spittlesJSUrl}"
</script>

使用<s:excapeBody>标签转义内容(支持HTML以及JavaScript):

<s:escapeBody htmlEscape="true>
<h1>Hello</h1>
</s:escapeBody>

猜你喜欢

转载自blog.csdn.net/Nemoosi/article/details/107416570