@Component
@Scope("session")
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue
@GenericGenerator(name = "incremental", strategy = "increment")
private Long userID;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String email;
@Column(nullable = false)
private String password;
// getters and setters
}
그리고이 컨트롤러 :
@Controller
@SessionAttributes("user")
@Scope("request")
public class UserCreationWizard {
@Autowired
private User user;
@ModelAttribute("user")
private User createUser() {
return user;
}
@RequestMapping(value = "/new/users/page/", method = RequestMethod.GET)
public String begin(HttpServletRequest request) {
return "wizard";
}
@RequestMapping(value = "/new/users/page/{page}", method = RequestMethod.POST)
public String step(@ModelAttribute("user") User user,
@RequestParam("username") String username,
@RequestParam("email") String password,
@PathVariable() Integer page) {
return "wizard" + page;
}
@RequestMapping(value = "/new/users/page/end", params = "submit", method = RequestMethod.POST)
public String end(@RequestParam("password") String password) {
user.setPassword(password);
user.setActive(true);
user.setLastLoggedIn(Calendar.getInstance());
Session s = HibernateUtils.getSessionFactory().openSession();
Transaction t = s.beginTransaction();
try {
s.persist(user);
s.flush();
t.commit();
s.close();
} catch (HibernateException e) {
t.rollback();
}
return "wizard";
}
}
begin()
username
및
email
에 대한 입력란이 있습니다. 보기에서
step()
을 트리거하는 POST 양식 제출을 작성합니다. 두 번째보기 (wizard + page.jsp)에는
password
필드와
end()
을 트리거하는 제출 입력이 있습니다.
- 디버그 모드에서 나는 ModelAttribute 모 데르로 사용자를 통과 한
step()
에, 나는 이름과 암호를 해당 필드를 설정할 필요가 없습니다 것으로 나타났습니다. 그들은 RequestParams 속성에서 자동으로 부여받습니다. 그러나end()
에서는 ModelAttribute가없는 곳에서 암호를 수동으로 설정해야합니다. Spring은 이것을 어떻게 관리합니까? - 또한 컨트롤러에서
createUser()
메서드를 제거하면 "user"에 대한 세션 특성을 찾을 수 없다는 메시지가 나타나면서 응용 프로그램이 실패합니다. 이 메서드는 MethodAttribute에 메서드 매개 변수로 어떻게 연결되어 있습니까? - 마지막으로, @SessionAttributes를 꺼내면 응용 프로그램이 실패하지는 않지만 뭔가 잘못 될 것으로 생각됩니다. 사용자 사용자가 이제 모든 httprequests에 대해 글로벌가됩니까?
내 일반적인 질문은 다음과 같습니다. 스프링 콩을 이름에 매핑합니까? 예 : 여기에는 사용자로서 '사용자'와 세션에서 '사용자', 요청 매개 변수로 '암호', 사용자 멤버 변수로 '암호'가 있습니다.
무례한 것은 아니지만 대부분의 사람들은 사람들이 질문을 게시하기 전에 노력했다는 것을 알고 싶어합니다. – madth3