2017-06-13 13 views
0

在互聯網上搜索並嘗試了不同的解決方案,但不知何故,沒有人在我的情況下工作。基於html輸入創建並保留一個新用戶。 Spring MVC,JPA Hibernate,Thymeleaf

我有以下的HTML模板的視圖,你應該自己註冊:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
    <link rel="stylesheet" type="text/css" th:href="@{/css/style.css}" /> 
    <!-- Page title --> 
    <title> Register</title> 
</head> 
<body> 


<form action="#" th:action="@{/registeruser}" th:object="${user}" method="post"> 
    <input type="text" th:field="*{username}" /> 
    <input type="text" th:field="*{email}" /> 
    <input type="text" th:field="*{password}" /> 
    <input type="submit" /> 
</form> 


</body> 
</html> 

也在這裏是控制器:

@Controller 
public class RegisterController { 

    @Autowired 
    private UserService userservice; 

    @Autowired 
    private RoleService roleService; 

    @RequestMapping(value = "/register", method = RequestMethod.GET) 
    public String regUser(Model model) { 
     User u = new User(); 
     u.setUsername("username"); 
     u.setPassword("password"); 
     u.setEmail("email"); 
     Set<Role> userRoles = new HashSet<>(); 
     userRoles.add(roleService.findRoleByName("ROLE_USER")); 
     u.setRoles(userRoles); 

     System.out.println("test"); 

     model.addAttribute("user", u); 
     return "register"; 
     // return new ModelAndView("register", "command", new User()); 
    } 

    @RequestMapping(value = "/registeruser", method = RequestMethod.POST) 
     public String addUser(@ModelAttribute(value = "user")User user, 
       ModelMap model) { 

      model.addAttribute("username", user.getUsername()); 
     model.addAttribute("password", user.getPassword()); 
     model.addAttribute("email", user.getEmail()); 

     System.out.println("user " + user.getUsername() + "got registered, here a list of all users: "); 
     return "login"; 
    } 
} 

控制檯打印測試工作在regUser()方法,但不知何故,在addUser()方法打印的控制檯不起作用,所以我猜它不會被觸發? 此外,視圖工作完美,我提交到登錄頁面後重定向,但這也是defaultSuccesFulUrl,所以它可能意味着什麼。

有點沮喪在這一個,所以它會很好,如果你能幫助。 在此先感謝。

+0

嘗試刪除'行動=「#」' – bphilipnyc

+0

刪除它,行爲沒有改變。 – Zytro

回答

0

嘗試在您的表單中刪除action="#"。這可能會踩踏Thymeleaf所產生的。

旁白:

  • 您可以使用@GetMapping@PostMapping速記爲您 映射。

  • 你會想將它更改爲input type="password"

  • 可以使用Model代替ModelMap

  • 使用@Slf4j和您選擇的測井系統的

+0

感謝您的建議,刪除「action =」#「」語句沒有幫助。 – Zytro

0

變更您的文章方法到

@RequestMapping(value = "/registeruser", method = RequestMethod.POST) 
public String addUser(User user) { 
... 

也就是如果你提交更好的,說的是一個按鈕

<button type="submit">Submit</button> 

正如說bphlilipnyc刪除動作=「#」