`
Josh_Persistence
  • 浏览: 1632833 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Spring3.X @MVC - (十)用@Value在控制器中赋值

阅读更多

前言:

一、总共有10节,也就是10篇博客来讲述Spring的MVC,几乎涵盖了所有Spring MVC中的内容。

 

二、我创建的例子是一个球场预订系统,例子我已经测试调试通过,是一个Maven的project,包含一个Parent project:wsheng-spring-base和一个子Module:wsheng-spring-mvc.

 

三、在Eclipse中直接import maven的project即可,会同时引入上诉两个project的。

 

四、如果你没有耐心,可以不必往下学习,因为网上有很多例子,但是都是讲的Spring MVC很少的面,而且你可以快速的上手,但如果你想真正了解Spring MVC中的很多细节,就可以慢慢的去看博客(从第一节到第十节),如果有什么问题,欢迎信息告诉我。

 

五、学习的方法是你可以先将源码导入到eclipse中,然后根据博客上的内容,对照源码,慢慢消化,这是个漫长的过程,但是会帮助你了解很多Spring MVC的细节。

===================================================================================

 

 

 

 

1. 问题:

    创建MVC控制器的时候,不想硬编码字段的值,而是想赋一个出现在Bean文件或者是属性资源文件(message.properties)中的值。

 

2.解决方法:

    用@Value注解使得Spring的MVC控制器中相关的字段能够使用Spring表达式语言SpEL进行赋值。你可以使用@Value注解和SpEL一起,查询应用上下文中的bean,取到相关的值。

 

3.工作原理:

    例子: 例如,假如你有一个简单的控制器,它的作用仅仅是显示一个“关于”页面,如下的JSP:

 

<html>

<head>

<title>About</title>

</head>

 

<body>

<h2>Court Reservation System</h2>

<table>

  <tr>

    <td>Version:</td>

    <td>1.0</td>

  </tr>

</table>

</body>

</html>

         在“关于”页面中添加管理员的联络邮件是最常见的做法。但是管理员的邮件地址有可能出现在除了“关于”页面的其他多个页面中。因为我们最好在一个统一的地方存放管理员的邮件地址,message.properties就是个不错的选择。这样,如果管理员的地址发生变化,我们只需要修改一个地方,让其它用到该邮件地址的地方也发生变化。所以我们可以在message.properties文件中添加如下属性:

admin.email=wangsheng23@126.com

        然后可以修改about.jsp将控制器传入的email属性作为模式属性显示:

<html>

<head>

<title>About</title>

</head>

 

<body>

<h2>Court Reservation System</h2>

<table>

  <tr>

    <td>Version:</td>

    <td>1.0</td>

  </tr>

  <tr>

    <td>Email:</td>

    <td><a href="mailto:${email}">${email}</a></td>

  </tr>

</table>

</body>

</html>

 

在应用的/WEB-INF/jsp中创建about.jsp之后,接下来我们就就可以创建对应的控制器,以便把E-mail属性传递给视图。下面的AboutConroller使用@Value注解,通过message.properties文件为email字段赋值。

@Controller

public class AboutController {

 

  @Value("#{ messageSource.getMessage('admin.email',null,'en')}")

    private String email;

 

    @RequestMapping("/about")

    public String courtReservation(Model model) {

        model.addAttribute("email", email);

return "about";

    }

}

   赋予@Value注解的值是一条SpEL语句,SpEL语句可以由标记形式#{SpEL Statement}识别出来。

   在这个例子中,messageReource代表Bean org.springframework.context.support.ResourceBundleMessageSource的值,这个Bean在web应用上下文中声明,用于访问message.properties文件。

       关于该bean的配置,可以参照:http://josh-persistence.iteye.com/admin/blogs/1881831Spring3.X @MVC - (五)用外部化文件来显示区域的信息)

 <!-- Message .properties sources --> 

    <bean id="messageSource"

        class="org.springframework.context.support.ResourceBundleMessageSource"> 

<!--         <property name="basename" value="messages.properties" /> -->

<property name="basename" value="messages" />

    </bean>

messageSource.getMessage('admin.email',null,'en')是Bean类的方法,使用这些参数访问会返回admin.email的值。通过@Value的注解,该值会自动赋值给email字段。(即SpEL和messageSource是用来从properties文件中取值的,而@Value是用来赋值的。

 

      最后可以通过http://localhost:8088/wsheng-spring-mvc/about 测试。

  

  

1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics