1. [Não recomendado] Encapsular os dados a serem encaminhados em HttpServletRequest
Você pode adicionar parâmetros do tipo HttpServletRequest à lista de parâmetros do método de processamento de solicitação. Quando os dados precisam ser encaminhados, chame o método setAttribute (String name, Object value) do objeto de parâmetro para encapsular e, em seguida, encaminhe-o:
@RequestMapping("handle_login.do")
public String handleLogin(String username, String password,
HttpServletRequest request) {
System.out.println("UserController.handleLogin()");
System.out.println("username=" + username);
System.out.println("password=" + password);
// 判断用户名
if ("root".equals(username)) {
// 用户名正确,需要判断密码
if ("1234".equals(password)) {
// 密码也正确,则登录成功
// TODO 处理登录成功
} else {
// 密码错误
request.setAttribute("errorMessage", "密码错误");
return "error";
}
} else {
// 用户名错误
request.setAttribute("errorMessage", "用户名不存在");
return "error";
}
return null;
}
Então, na página de modelo do Thymeleaf, use a expressão para ler os dados encapsulados acima:
<h3 th:text="${errorMessage}">xxxxxxx</h3>
2. [Recomendado] Encapsular os dados a serem encaminhados no ModelMap
O método de uso é basicamente o mesmo que usar HttpServletRequest! É necessário adicionar um parâmetro de tipo ModelMap à lista de parâmetros do método de processamento da solicitação. Quando os dados precisam ser encaminhados, o addAttribute (nome da string, valor do objeto) do objeto de parâmetro é chamado para encapsular os dados a serem encaminhados:
@RequestMapping("handle_login.do")
public String handleLogin(String username, String password,
ModelMap modelMap) {
System.out.println("UserController.handleLogin()");
System.out.println("username=" + username);
System.out.println("password=" + password);
// 判断用户名
if ("root".equals(username)) {
// 用户名正确,需要判断密码
if ("1234".equals(password)) {
// 密码也正确,则登录成功
// TODO 处理登录成功
} else {
// 密码错误
// request.setAttribute("errorMessage", "密码错误");
modelMap.addAttribute("errorMessage", "[M] 密码错误");
return "error";
}
} else {
// 用户名错误
// request.setAttribute("errorMessage", "用户名不存在");
modelMap.addAttribute("errorMessage", "[M] 用户名不存在");
return "error";
}
return null;
}
ModelMap é herdado de LinkedHashMap. O método addAttribute () é essencialmente implementado chamando o método put () de Map.
3. [Não recomendado] Use ModelAndView como o valor de retorno do método de processamento de solicitação
Declare o valor de retorno do método de processamento da solicitação como o tipo ModelAndView. Quando você precisar retornar o resultado, chame o método de construção ModelAndView (String viewName, Map <String,?> Model) para determinar o nome da visualização e os dados:
@RequestMapping("handle_login.do")
public ModelAndView handleLogin(String username, String password) {
System.out.println("UserController.handleLogin()");
System.out.println("username=" + username);
System.out.println("password=" + password);
Map<String, Object> map = new HashMap<String, Object>();
// 判断用户名
if ("root".equals(username)) {
// 用户名正确,需要判断密码
if ("1234".equals(password)) {
// 密码也正确,则登录成功
// TODO 处理登录成功
} else {
// 密码错误
// request.setAttribute("errorMessage", "密码错误");
// modelMap.addAttribute("errorMessage", "[M] 密码错误");
map.put("errorMessage", "[MAV] 密码错误");
return new ModelAndView("error", map);
}
} else {
// 用户名错误
// request.setAttribute("errorMessage", "用户名不存在");
// modelMap.addAttribute("errorMessage", "[M] 用户名不存在");
map.put("errorMessage", "[MAV] 用户名不存在");
return new ModelAndView("error", map);
}
return null;
}