美文网首页
渲染Web视图——使用Spring的通用标签库

渲染Web视图——使用Spring的通用标签库

作者: 鉴闻俗说 | 来源:发表于2017-04-04 20:32 被阅读0次

    使用Spring的通用标签库

    • 使用Spring的通用标签库,必须要在页面上对其进行声明
    <%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
    

    展现国际化信息

    • 对于渲染文本来说,<s:message>是很好的方案,文本能够位于一个或多个属性文件中。借助<s:message>,可以将硬编码的欢迎信息:
    <h1>Welcome to Spittr</h1>
    

    替换为如下的形式

    <h1><s:message code="spittr.welcom" /></h1>  
    
    • <s:message>将会根据key为spittr.welcom的信息源渲染文本。因此需要配置一个这样的信息源。Spring有多个信息源的类,它们都实现了MessageSource接口。
      (1)更为常见和有用的是ResourceBundleMessageSoource。它会从一个属性文件中加载信息,这个属性文件的名称是根据基础名称(base name)衍生而来的。如下的@Bean方法配置了ResourceBundleMessageSoource:
        @Bean
        public MessageSource messageSource() {
            ResourceBundleMessageSource messageSource =
                    new ResourceBundleMessageSource();
            messageSource.setBasename("message");
            return messageSource;
        }
    

    在这个bean声明中,核心在与设置basename属性,其将会在根路径的 属性文件中解析信息,这些属性文件的名称是根据这个basename得到的
    (2)另外的可选方案是使用ReloadableResourceBundleMessageSource ,其工作方式与ResourceBundleMessageSource非常相似,但是它能够重新加载信息属性,不必重新编译或重启应用。

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

    关键区别在于basename属性设置为在应用的外部查找(而不是像ResourceBundleMessageSource那样在累路径下查找)。

    • message.properties文件的配置,以英语为例
    spittr.Welcom=Welcom to Spittr!
    

    创建URL

    • <s:url>的主要任务就是创建URL,然后将其复制给一个变量或者渲染到响应中。按照其最简单的形式, <s:url>会接受一个相对于上下文的URL,并在渲染的时候,预先添加上Servlet上下文路径。例如考虑如下 <s:url>的基本用法:
     <a href="<s:url href="/spitter/register"/>">Register</a>
    

    如果应用的上下文名是spittr,那么在响应中会渲染如下的HTML:

    <a href="/spittr/spitter/register">Register</a>
    
    • 还可以使用<s:url>创建URL,并将其赋值给一个变量供模版在稍后使用:
    <s:url value="/spitter/register" var="registerUrl" />
    <a href="${registerUrl}"></a>
    

    默认情况下,URL是在页面作用于内创建的。但是可以通过scope属性,让 <s:url>在应用作用域内、会话作用域内或者请求作用域内创建URL:

    <s:url value="/spitter/register" var="registerUrl"  scope="request"/>
    <a href="${registerUrl}"></a>
    
    • 在URL上添加参数,可以使用<s:param>标签:
     <s:url value="/spittles" var="spittlesUrl">
            <s:param name="max" value="60" />
            <s:param name="count" value="20" />
     </s:url>
    

    使用<s:param>标签还可以创建带有路径参数的URL,时期具有路径变量的占位符:

    <s:url value="/spittles/{userName}" var="spittlesUrl">
            <s:param name="userName" value="jbauer" />
     </s:url>
    

    当value属性中的占位符匹配<s:param>中指定的参数时,这个参数将会插入到占位符的位置中。如果<s:param>参数无法匹配value中的任何占位符,那么这个参数将会作为查询参数。

    • <s:url>还可以解决URL的转移需求。
      (1)可以通过设置htmlEscape属性为true,将渲染得到的URL内容展现在Web页面上(而不是作为超链接)。
    <s:url value="/spittles" htmlEscape="true">
            <s:param name="max" value="60" />
            <s:param name="count" value="20" />
    </s:url>
    

    (2)可以将javaScriptEscape属性为true,便可以在Java代码中使用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:escapeBody>标签是一个通用的转义标签。通过设置htmlEscape属性为true,可以在页面上展现一个HTML代码片段;通过设置javaScript属性为true,可以实现JavaScript的的转义。

    相关文章

      网友评论

          本文标题:渲染Web视图——使用Spring的通用标签库

          本文链接:https://www.haomeiwen.com/subject/ehhzottx.html