备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决!
上一篇:springboot-基础-eclipse配置+helloword示例
添加model和controller的例子
文件结构:
User.java
package com.example.demo.model;
public class User {
private String name;
private String sex;
private String hobby;
public User() {
super();
}
public User(String name, String sex, String hobby) {
super();
this.name = name;
this.sex = sex;
this.hobby = hobby;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
UserController.java
package com.example.demo.controller;
import com.example.demo.model.User;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;
@Controller
public class UserController {
@RequestMapping(value="/user")
public String index(Model model) {
List<User> users = new ArrayList<User>();
users.add(new User("name1", "male", "略略略"));
users.add(new User("name2", "female", "singing"));
users.add(new User("小猪佩奇", "雄性", "社会人"));
model.addAttribute("users", users);
return "user";
}
}
user.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>test</title>
</head>
<body>
<table>
<tr>
<td>Name</td>
<td>Sex</td>
<td>Hobby</td>
<td>性别</td>
</tr>
<tr th:each="user:${users}" th:object="${user}">
<td th:text="${user.name}"></td>
<td th:text="${user.sex}"></td>
<td th:text="${user.hobby}"></td>
<!-- 这里类似模糊查找 -->
<td th:text="*{name}"></td>
</tr>
</table>
</body>
</html>
application properties添加一点配置:
#国际化配置
spring.messages.basename=i18n/messages
spring.messages.encoding=UTF-8
结果:
注解开发
restful风格是一种开发想法,现行技术并没有完全实现。注解就是下表中的一些标记,这些标记带有特殊功能。
<context:component-scan/>
标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Component
、@Repository
、@Service
、@Controller
标签的类自动注册到spring容器。对标记了 Spring’s @Required
、@Autowired
、JSR250’s @PostConstruct
、@PreDestroy
、@Resource
、JAX-WS’s @WebServiceRef
、EJB3’s @EJB
、JPA’s @PersistenceContext
、@PersistenceUnit
等注解的类进行对应的操作使注解生效(包含了annotation-config标签的作用)。
使用@RestController 大坑
这个注解相当于@ResponseBody 和 @Controller两个注解的组合,不返回视图,只返回数据。如果一个类上加了这个注解,那么这个类的函数都是返回不了视图的,return "redirect:/seq_tool/seq_order_details"
;也会只在页面上显示return的字符串。
解决方法是把类上的注解改为@Controller
,然后给不返回视图,只返回数据的函数加上注解@ResponseBody
,如
@RequiresPermissions("seq_tool:getcfmd")
@PostMapping(value="/getcfmd")
@ResponseBody
public PageResult getCfmd(String userid) {
SeqOrderConditionVO vo = new SeqOrderConditionVO();
PageInfo<SeqOrder> pageInfo = sysSeqOrderService.listCfmdByUserId(userid, vo);
return ResultUtil.tablePage(pageInfo);
}
Model ModelMap和ModelAndView的区别
例子
- model
@RequestMapping(value = "/index1")
public String index1(Model model) {
model.addAttribute("result", "后台返回index1");
return "result";
}
- ModelMap
@RequestMapping(value = "/index2")
public String index2(ModelMap model) {
model.addAttribute("result", "后台返回index2");
return "result";
}
- ModelAndView
@RequestMapping(value = "/index3")
public ModelAndView index3() {
ModelAndView mv = new ModelAndView("result");
// ModelAndView mv = new ModelAndView();
// mv.setViewName("result");
mv.addObject("result", "后台返回index3");
return mv;
}
@RequestMapping(value = "/index4")
public ModelAndView index4() {
Map<String, String> map = new HashMap<String, String>();
map.put("result", "后台返回index4");
return new ModelAndView("result", map);
}