私はこのクラスを持っています:
@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()
ユーザー作成ウィザードで最初のビュー(jsp)をロードするだけです。との入力フィールドがusername
ありemail
ます。ビューで、をトリガーするPOSTフォーム送信を行いますstep()
。2番目のビュー(wizard + page.jsp)には、password
をトリガーするフィールドと送信入力がありますend()
。
- デバッグモードでは
step()
、UserをModelAttributeとして渡した場合、ユーザー名とパスワードのフィールドを設定する必要がないことに気付きました。それらはRequestParams属性から自動的に取得されます。ただしend()
、ModelAttributeがない場合は、パスワードを手動で設定する必要があります。Springはこれをどのように管理しますか? - また
createUser()
、コントローラーでメソッドを取得すると、アプリケーションは「ユーザー」のセッション属性が見つからなかったと言って失敗します。このメソッドは、メソッドパラメーターとしてMethodAttributeにどのようにリンクされていますか? - 最後に、@ SessionAttributesを削除しても、アプリケーションは失敗しませんが、問題が発生しているように感じます。ユーザーユーザーはすべてのhttprequestsに対してグローバルになりますか?
私の一般的な質問は次のとおりです。春の豆はその名前にマッピングされていますか?例えば。ここでは、ユーザーとして「user」、セッションに「user」、requestparamとして「password」、Userメンバー変数として「password」があります。