springMVC 注解

转自: http://blog.csdn.net/shuimumu/article/details/7641774

shuimumu的专栏

   




mvc:view-controller
这个标签是为了简化ParameterizableViewController映射到视图的配置,当响应视图是不需要执行控制器逻辑时使用,一个跳转到主页的配置例子<mvc:view-controller path="/" view-name="home"/>(问题:在web的根目录有一个index.html文件,删掉了就可以了


springMVC中配置多个视图

web.xml

[html] view plaincopy

    <servlet>    
        <servlet-name>jstl</servlet-name>  
        <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>  
        <init-param>              
        <param-name>contextConfigLocation</param-name>              
        <param-value>/WEB-INF/config/jstl-servlet-admin.xml</param-value>          
        </init-param>   
        <load-on-startup>1</load-on-startup></servlet>  
    <servlet>    
        <servlet-name>fm</servlet-name>   
        <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>   
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <servlet-mapping>   
        <servlet-name>jstl</servlet-name>   
        <url-pattern>/*.jstl</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>   
        <servlet-name>fm</servlet-name>   
        <url-pattern>/*.fm</url-pattern>  
    </servlet-mapping>  

如果忽略contextConfigLocation此设定,则默认为“/WEB-INF/<servlet name>-servlet.xml”,其中<servlet name>以Servlet 名替换

<context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有:
@Controller 声明Action组件
@Service    声明Service组件    @Service("myMovieLister") 
@Repository 声明Dao组件
@Component   泛指组件, 当不好归类时. 
@RequestMapping("/menu")  请求映射
@Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 
@Autowired 用于注入,(srping提供的) 默认按类型装配 
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype")   设定bean的作用域

testServiceImpl extends HiberanteDaoSupport
注入sessionFactory
    @Autowired  
    public void setSessionFactoryOverride(SessionFactory sessionFactory) 
    {   
      super.setSessionFactory(sessionFactory);   
    }  

数据绑定结果和验证
数据绑定也许会导致类似于类型转换或域缺失的错误。不管发生什么错误,我们都希望能返回到编辑的表单,让用户自行更正。
要想实现这个目的,我们可直接在方法签名的表单模型对象后面追加一个BindingResult对象,发生错误时我们返回到出现问题的视图,并把从BindingResult得到的属性增加到模型上,这样特定域的错误就能够反馈给用户.

@ModelAttribute注解
<form:form modelAttribute="account" method="post">
即使我们没有在任何地方指定“account”的名称,这段JSP程序也会和上面所讲的方法签名协作的很好。这是因为@MVC用返回对象的类型名称作为默认值,因此一个Account类型的对象默认的就对应一个名为“account”的表单模型对象。如果默认的不合适,我们就可以用 @ModelAttribute来改变它的名称,

[java] view plaincopy

    @ModelAttribute("items")//<——①向模型对象中添加一个名为items的属性    
        public List<String> populateItems() {    
                List<String> lists = new ArrayList<String>();    
                lists.add("item1");    
                lists.add("item2");    
                return lists;    
        }    
        @RequestMapping(value = "test")    
        public String listAllBoard( ModelMap model) {    
                //<——②在此访问模型中的items属性    
                System.out.println("model.items:" + ((List<String>)model.get("items")).size());    
                return "listBoard";    
        }    

在 ① 处,通过使用 @ModelAttribute 注解,populateItem() 方法将在任何请求处理方法执行前调用,Spring MVC 会将该方法返回值以“items”为名放入到隐含的模型对象属性列表中。 
所以在 ② 处,我们就可以通过 ModelMap 入参访问到 items 属性,当执行 listAllBoard() 请求处理方法时,② 处将在控制台打印出“model.items:2”的信息。当然我们也可以在请求的视图中访问到模型对象中的 items 属性。

@ResponseBody的注解,Spring3.0 MVC @ResponseBody的作用是把返回值直接写到HTTP response body里。可以用于ajax。

@RequestParam注解用于在控制器中绑定请求参数到方法参数.使用这个注解参数默认是必需的, 但是可以把@RequestParam的required属性设置为false从而让这个参数可选.例如@RequestParam(value="name", required="false")

@PathVariable
@RequestMapping(value = "show/{id}")
public String show(@PathVariable long id, Model model)

@RequestMapping
有一点需要注意的,如果为类定义了访问地址为*.do,*.html之类的,则在方法级的@RequestMapping,不能再定义value值,否则会报错,例如 

[java] view plaincopy

    @RequestMapping("/bbs.do")    
    public class BbsController {    
        @RequestMapping(params = "method=getList")    
        public String getList() {    
         return "list";    
        }    
    @RequestMapping(value= "/spList")    
    public String getSpecialList() {    
         return "splist";    
        }    
    }    

如上例:/bbs.do?method=getList 可以访问到方法getList() ;而访问/bbs.do/spList则会报错. 

@SessionAttributes session管理 
Spring 允许我们有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现的。@SessionAttributes 只能声明在类上,而不能声明在方法上。 
例如 
@SessionAttributes("currUser") // 将ModelMap 中属性名为currUser 的属性 
@SessionAttributes({"attr1","attr2"}) 
@SessionAttributes(types = User.class) 
@SessionAttributes(types = {User.class,Dept.class}) 
@SessionAttributes(types = {User.class,Dept.class},value={"attr1","attr2"}) 
@CookieValue 获取cookie信息 
@RequestHeader 获取请求的头部信息

你可能感兴趣的:(springMVC)