一。
1. 总结最近几天的Spring social的流程,
下载Maven工程,导入工作空间,自动下载依赖jar包,(pom.xml文件中需要什么jar包配置自动加载,注意版本正确)
weibo Maven工程打包,并在社区应用的pom.xml中引入依赖该jar包,调用该应用的文件正常,说明融合正确;
剩下的开放都是在熟悉spring注解框架的基础上,调用相关应用的接口,完成各个功能,比如sina微博的发布、浏览、删除微博功能等
二。
1. 基于Spring social 项目,查看Spring注解开放方式相关文档,并在项目中测试验证;
验证:类级别注解和方法级别注解;
a). 每个请求处理参数对应一个 URL,方式就是每个方法上加注解
例如:
@RequestMapping("/listAllBoard") // <—— ①
public String listAllBoard() {
bbtForumService.getAllBoard();
System.out.println("call listAllBoard method.");
return "listBoard";
}
访问方式:http://192.168.190.182:8080/spring-social-showcase/listAllBoard
b). 一个 Controller 对应一个 URL,由请求参数决定请求处理方法,方式就是在类上和方法上都加注解
例如:
@Controller
@RequestMapping("/bbtForum") // <—— ① 指定控制器对应URL请求
public class BbtForumController {
@Autowired
private BbtForumService bbtForumService;
// <—— ② 如果URL请求中包括"method=listAllBoard"的参数,由本方法进行处理
@RequestMapping(params = "method=listAllBoard")
public String listAllBoard() {
bbtForumService.getAllBoard();
System.out.println("call listAllBoard method.");
return "listBoard";
}
同时我们可以在方法的参数中根据前台提交方式的不同使用,method = RequestMethod.POST 和method = RequestMethod.GET,处理特定的HTTP请求
例如:
@RequestMapping(params = "method=listAllBoard", method = RequestMethod.POST)
public String listAllBoard() {
bbtForumService.getAllBoard();
System.out.println("call listAllBoard method.");
return "listBoard";
}
访问方式:http://192.168.190.182:8080/spring-social-showcase/test?method=listAllBoard
三。
1. 处理 方法入参 如何 绑定 URL参数
a). 按参数名匹配进行绑定
listBoardTopic(int topicId,String boardName):分别和 topicId、boardName URL 请求参数绑定;
方法入参按参数名匹配的原则绑定到 URL 请求参数,同时还自动完成 String 类型的 URL 请求参数到请求处理方法参数类型的转换,URL 请求参数中一定要有对应的参数,否则将抛出 TypeMismatchException 异常,提示无法将 null 转换为基本数据类型。
b). 通过注解指定绑定的 URL 参数
例如:我们把URL参数 status 使用 @RequestParam 绑定到 方法 listAllBoard2 的 message 参数
@RequestMapping(params = "method=listAllBoard2")
public void listAllBoard2(@RequestParam("status") String message, HttpServletResponse res)
throws IOException {
System.out.println("*******call listAllBoard2 method******status:" + message);
res.getWriter().write("listAllBoard2");
}
2. request 和 session
a). request 借助 ModelMap model,保存某些参数
b). session 在类上进行注解:@SessionAttributes("currUser")
session注解方式:
通过字符串数组的方式指定多个属性,如 @SessionAttributes("currUser"), @SessionAttributes({“attr1”,”attr2”})
指定多个类,如 @SessionAttributes(types = User.class), @SessionAttributes(types = {User.class,Dept.class})
联合使用属性名和属性类型指定 @SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})
session 级别数据获取方式:session.getAttribute(“currUser”) 或 ModelMap#get(“currUser”)
2. 定义为处理请求准备数据的方法
可以将任何一个拥有返回值的方法标注上 @ModelAttribute,使其返回值将会进入到模型对象的属性列表中。来看下面的例子
populateItems不是一个请求处理方法,而是任何请求处理方法被调用之前,用来准备表单项模型对象的一个方法,
该形式的方法主要针对不需要传递参数的获取数据方式
@ModelAttribute("items")//<——①向模型对象中添加一个名为items的属性
public List<String> populateItems() {
List<String> lists = new ArrayList<String>();
lists.add("item1");
lists.add("item2");
return lists;
}
一个队单条记录进行编辑的绑定实例:
1>. 首先获取数据并放到request中,跳转到编辑页面取用
@RequestMapping(value = "/weibo/pageWeibo")
public String pageWeibo(Long id, Model model) {
model.addAttribute("statuForm",weibo.timelineOperations().getStatus(id));
return "weibo/pageWeibo";
}
2>. 编辑页面 modelAttribute="statuForm"
<c:url value="/weibo/submitWeibo" var="submitWeiboUrl" />
<form:form id="signup" action="${submitWeiboUrl}" method="post" modelAttribute="statuForm">
<fieldset>
<form:label path="text">First Name <form:errors path="text" cssClass="error" /></form:label>
<form:input path="text" />
<form:label path="source">Last Name <form:errors path="source" cssClass="error" /></form:label>
<form:input path="source" />
<form:hidden path="id"/>
</fieldset>
<p><button type="submit">Sign Up</button></p>
</form:form>
3>. 编辑后提交后台处理 绑定 @ModelAttribute("statuForm") StatuForm status
@RequestMapping(value = "/weibo/submitWeibo")
public String submitWeibo(@ModelAttribute("statuForm") StatuForm status,
Long id, Model model) {
System.out.println(status.getId() + status.getText());
return "redirect:/weibo/public";
}
1. 总结最近几天的Spring social的流程,
下载Maven工程,导入工作空间,自动下载依赖jar包,(pom.xml文件中需要什么jar包配置自动加载,注意版本正确)
weibo Maven工程打包,并在社区应用的pom.xml中引入依赖该jar包,调用该应用的文件正常,说明融合正确;
剩下的开放都是在熟悉spring注解框架的基础上,调用相关应用的接口,完成各个功能,比如sina微博的发布、浏览、删除微博功能等
二。
1. 基于Spring social 项目,查看Spring注解开放方式相关文档,并在项目中测试验证;
验证:类级别注解和方法级别注解;
a). 每个请求处理参数对应一个 URL,方式就是每个方法上加注解
例如:
@RequestMapping("/listAllBoard") // <—— ①
public String listAllBoard() {
bbtForumService.getAllBoard();
System.out.println("call listAllBoard method.");
return "listBoard";
}
访问方式:http://192.168.190.182:8080/spring-social-showcase/listAllBoard
b). 一个 Controller 对应一个 URL,由请求参数决定请求处理方法,方式就是在类上和方法上都加注解
例如:
@Controller
@RequestMapping("/bbtForum") // <—— ① 指定控制器对应URL请求
public class BbtForumController {
@Autowired
private BbtForumService bbtForumService;
// <—— ② 如果URL请求中包括"method=listAllBoard"的参数,由本方法进行处理
@RequestMapping(params = "method=listAllBoard")
public String listAllBoard() {
bbtForumService.getAllBoard();
System.out.println("call listAllBoard method.");
return "listBoard";
}
同时我们可以在方法的参数中根据前台提交方式的不同使用,method = RequestMethod.POST 和method = RequestMethod.GET,处理特定的HTTP请求
例如:
@RequestMapping(params = "method=listAllBoard", method = RequestMethod.POST)
public String listAllBoard() {
bbtForumService.getAllBoard();
System.out.println("call listAllBoard method.");
return "listBoard";
}
访问方式:http://192.168.190.182:8080/spring-social-showcase/test?method=listAllBoard
三。
1. 处理 方法入参 如何 绑定 URL参数
a). 按参数名匹配进行绑定
listBoardTopic(int topicId,String boardName):分别和 topicId、boardName URL 请求参数绑定;
方法入参按参数名匹配的原则绑定到 URL 请求参数,同时还自动完成 String 类型的 URL 请求参数到请求处理方法参数类型的转换,URL 请求参数中一定要有对应的参数,否则将抛出 TypeMismatchException 异常,提示无法将 null 转换为基本数据类型。
b). 通过注解指定绑定的 URL 参数
例如:我们把URL参数 status 使用 @RequestParam 绑定到 方法 listAllBoard2 的 message 参数
@RequestMapping(params = "method=listAllBoard2")
public void listAllBoard2(@RequestParam("status") String message, HttpServletResponse res)
throws IOException {
System.out.println("*******call listAllBoard2 method******status:" + message);
res.getWriter().write("listAllBoard2");
}
2. request 和 session
a). request 借助 ModelMap model,保存某些参数
b). session 在类上进行注解:@SessionAttributes("currUser")
session注解方式:
通过字符串数组的方式指定多个属性,如 @SessionAttributes("currUser"), @SessionAttributes({“attr1”,”attr2”})
指定多个类,如 @SessionAttributes(types = User.class), @SessionAttributes(types = {User.class,Dept.class})
联合使用属性名和属性类型指定 @SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})
session 级别数据获取方式:session.getAttribute(“currUser”) 或 ModelMap#get(“currUser”)
2. 定义为处理请求准备数据的方法
可以将任何一个拥有返回值的方法标注上 @ModelAttribute,使其返回值将会进入到模型对象的属性列表中。来看下面的例子
populateItems不是一个请求处理方法,而是任何请求处理方法被调用之前,用来准备表单项模型对象的一个方法,
该形式的方法主要针对不需要传递参数的获取数据方式
@ModelAttribute("items")//<——①向模型对象中添加一个名为items的属性
public List<String> populateItems() {
List<String> lists = new ArrayList<String>();
lists.add("item1");
lists.add("item2");
return lists;
}
一个队单条记录进行编辑的绑定实例:
1>. 首先获取数据并放到request中,跳转到编辑页面取用
@RequestMapping(value = "/weibo/pageWeibo")
public String pageWeibo(Long id, Model model) {
model.addAttribute("statuForm",weibo.timelineOperations().getStatus(id));
return "weibo/pageWeibo";
}
2>. 编辑页面 modelAttribute="statuForm"
<c:url value="/weibo/submitWeibo" var="submitWeiboUrl" />
<form:form id="signup" action="${submitWeiboUrl}" method="post" modelAttribute="statuForm">
<fieldset>
<form:label path="text">First Name <form:errors path="text" cssClass="error" /></form:label>
<form:input path="text" />
<form:label path="source">Last Name <form:errors path="source" cssClass="error" /></form:label>
<form:input path="source" />
<form:hidden path="id"/>
</fieldset>
<p><button type="submit">Sign Up</button></p>
</form:form>
3>. 编辑后提交后台处理 绑定 @ModelAttribute("statuForm") StatuForm status
@RequestMapping(value = "/weibo/submitWeibo")
public String submitWeibo(@ModelAttribute("statuForm") StatuForm status,
Long id, Model model) {
System.out.println(status.getId() + status.getText());
return "redirect:/weibo/public";
}