(Portal 开发读书笔记)Spring Portlet MVC 常用注解大全


http://tech.ddvip.com/2013-08/1375683855200280.html
(Portal 开发读书笔记)Spring Portlet MVC 常用注解大全
@Controller  ,标注在类级别,用于标注一个Portlet Handler,控制器类可以是任意的类。
----
@Autowired ,标注在构造器,setter方法,或者字段上,用于让Spring根据类型来注入依赖,所以如果在Spring上下文中如果有某个类的多个bean实例,则会抛出异常,此时我们应该配合@Qualifier 一起使用。
比如我们有
双击代码全选

<bean id="bookservice1" class="foo.bar.service.BookService/>
     
<bean id="bookservice2" class="foo.bar.service.BookService"/>
     
<bean id="bookservice3" class="foo.bar.service.BookService"/>
我们想让我们的Controller注入bookservice1 ,则必须联合使用@Autowired和@Qualifier:
双击代码全选

@Controller(value="addBookController")
public class AddBookController {
@Autowired
@Qualifier("bookservice1")
private BookService bookService;
...
}
@Resource,标注在类,字段,setter方法,但是不可以标注在构造器上,用于让Spring根据名字来注入依赖。
双击代码全选

@Controller(value="addBookController")
public class AddBookController {
@Resource(name="myBookService")
private BookService bookService;
...
}
在Portlet Controller的内部,我们还可以用以下的注解:
@RequestMapping,标注在类和方法上,Portlet常用的映射策略是:将一种Portlet模式映射到控制器类上,然后将请求参数映射到各个处理器方法上。
当用于类级时,它可以将对portlet的请求根据当前portlet的mode和请求参数来映射到Handler上,例如:
双击代码全选

@Controller(value="someController")
@RequestMapping(value="VIEW",
params="action=showSomething")
public class SomeController {
public String showSomething(...) {
return "addBookForm";
}
public void doSomething(...) {
}
}
当用于方法级时,它可以将对portlet的请求根据当前portlet的mode和请求参数映射到Handler的某个方法上,例如:
双击代码全选

@Controller(value="someController")
public class SomeController {
@RequestMapping(value="VIEW",
params="action=showSomething")
public String showSomething(...) {
}
@RequestMapping(value="ACTION", params="action=doSomeWork")
public void doSomething(...) {
}
}
注意,类级别的@RequestMapping的模式和方法级别的@RequestMapping的模式必须匹配,否则会产生错误。
也可以根据方法的签名来让Spring自动判断某个方法是render处理方法还是action处理方法,比如:
双击代码全选

@Controller(value="someController")
@RequestMapping(value="VIEW")
public class SomeController {
...
    
//下面的处理方法是一个render请求的处理方法
@RequestMapping(params="action=showSomething")
public String showSomething(Model model) {
}
//下面的处理方法是一个action请求的处理方法
@RequestMapping(params="action=doSomeWork")
public void doSomething(ActionRequest request) {
}
}
action请求的处理方法总是返回void
----
为了让请求类型映射更加清晰,我们不用@RequestMapping,而是用更加具体的标注比如 @RenderMapping ,@ActionMapping:
----
@RequestMapping
@RenderMapping:标注在方法上,用于将一个render类型的portlet 请求映射到处理器的render方法上,其中value也可以不指定,如果不指定则表示渲染到NOMAL+MAXIMIZED+MINIMIZED上。
双击代码全选

@Controller(value="someController")
@RequestMapping(value="VIEW")
public class SomeController {
@RenderMapping(value="NORMAL",
params="action=showSomething")
public String showSomething(Model model) {
}
}
注意,@RenderMapping必须和@RequestMapping联合使用,因为@RequestMapping可以指定Portlet Mode,而@RenderMapping无法指定Portlet Mode.
-----
@ActionMapping:
@ActionMapping标注在方法上,用于将一个action类型的portlet请求映射到处理器的action方法上,其中value也可以不指定。
双击代码全选

@Controller(value="someController")
@RequestMapping("VIEW")
public class SomeController {
@ActionMapping(value="doSomeWork",
params={"work=laundry","time=enough"})
public String doSomething(ActionRequest request) {
...
}
...
}
注意,@ActionMapping必须和@RequestMapping联合使用,因为@RequestMapping可以指定Portlet Mode,而@ActionMapping无法指定Portlet Mode.
----
@RequestParam 是方法参数级的注解,用于绑定请求参数到方法参数
双击代码全选

@RequestMapping
public void advancedSearch(
   @RequestParam("queryStr") String queryStr,
   @RequestParam("showFlag") String showFlag,
   @RequestParam("totalnumber") String totalNumber,
   @RequestParam("upType") String upType,
   @RequestParam("jmesareq") String jmesaReq,
   @RequestParam("isExportOper") String isExportOper,
   RenderResponse response, final RenderRequest request,
   ModelMap model) {
  // get query structure and query type from page
  List<Long> cd_ids = new ArrayList<Long>();
  if(StringUtils.equals("invoke", jmesaReq)){
   cd_ids = (List<Long>)request.getSession().getAttribute(Constants.RESULT_IDS);
  }
....
}
@ModelAttribute ,标注在方法或者方法参数中,用于从Model对象中添加或者移除属性。
如果用于方法级别,那么方法的返回值被添加到Model对象中,value属性表明存放到Model中的key.例如:
双击代码全选

@Controller(value="bookController")
@RequestMapping("VIEW")
public class BookController {
@Autowired
@Qualifier("myBookService")
private BookService bookService;
...
@ModelAttribute(value="books")
public List<Book> getBooks() {
return bookService.getBooks(isbnNumber);
}
...
}
注意,被@ModelAttribute标注的方法的调用时间总是早于被@RenderMapping或者@ActionMapping所标注的方法.

猜你喜欢

转载自1074213947.iteye.com/blog/2210347