Spring MVC学習ノート6——簡単なユーザー管理(2)の追加と検証を実現する.

6729 ワード

Spring MVC学習ノート6——簡単なユーザー管理(2)user modelの添削を実現する【validation追加】
ユーザを追加:
1.トップページの要求はクラスの頭に書いてください.
「UserController.java」ファイルの中で:トップページの要求は/userで、だからRequest Mapping(「/user」)、下位の要求はclassの中のmethodに書いています.
@RequestMapping("/user")
public class UserController {
	
	//1. save a value here
	private Map<String,User> users=new HashMap<String, User>();
	
	//2.         ,    users    ,       
	public UserController(){
		users.put("sdy", new User("sdy", "888", "   ", "[email protected]"));
		users.put("hxm", new User("hxm", "889", "   ", "[email protected]"));
		users.put("cqh", new User("cqh", "818", "   ", "[email protected]"));
		users.put("yhl", new User("yhl", "808", "   ", "[email protected]"));
	}
	
2.ブラウザの最初の要求について、ユーザリストを取得する
ブラウザの最初の要求は{url}/user/usersです. 
 
list.jspページに対応するには、このマッピングはpublic String Listに書いてあります.
//3.    list    , model()    users
	@RequestMapping(value= "/users", method=RequestMethod.GET)
	public String List(Model model){
		model.addAttribute("userss",users);		//transfer "userss" to ${userss} in /user/list.jsp
		return "user/list";
		 
	}
list.jspページコードはこのままusersを使用します.
	<c:forEach items="${userss}" var="um"><span style="white-space:pre">		</span><!-- ${userss} -->
		   ${um.value.nickname }		<!-- //    -->
		...<a href="${um.value.username}"> ${um.value.username } </a>	<!-- //sdy -->
		-- ${um.value.password } 
		-- ${um.value.email }<br/>
	</c:forEach>
3.ブラウザがuser/addに入るのは、GET要求です.ブラウザはuser/addで「提出」をクリックし、user/addのPOST要求です.
ブラウザのuser/addに初めてアクセスする場合は、GET要求であり、先にadd.jspをマッピングして、add関連フォームを表示します.user/addページで、「提出」をクリックした後、POST要求です.後端の操作は:1.合法かどうか判断して、もしそうであれば、レコードを追加して、リストページに戻ります.いいえ、メッセージを表示します.
3.1初めてログインし、GET要求:
//4.      ,GET  ,    add  ,    
/*@RequestMapping(value="/add", method=RequestMethod.GET) 
public String add(Model model){     //    model driven 
	//  model driven,  5  post  ,     add.jsp     :myuser.getUsername() 
	model.addAttribute("User000",new User());   //    1 ,key = User000 
<span style="white-space:pre">						</span>//  add.jsp   User,     22 :“... new User("   ", ...” 
	return "user/add"; 
} */  
@RequestMapping(value="/add", method=RequestMethod.GET)  
public String add(@ModelAttribute("userk") User user) {      // 2 :      model ,key name = userk  
	return "user/add";  
}  
3.2ページで「提出」をクリックし、POST要求:
	@RequestMapping(value="/add", method=RequestMethod.POST)
	//public String add(User myuser, String abc){
	public String add(@Validated User user, BindingResult mybr){ 	//add Validation here,     Validate
		if (mybr.hasErrors()){
			//     ,     add    ,  add。jsp       
			return "user/add";
		}
		//users is an object:
		users.put(user.getUsername(), user); 	// use "user.getUsername()" to get username
		return "redirect:/user/users";		//client jump to /user/users      
	}
/user/add+GET要求時に戻るview:add.jsp
	<%@taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>     <!--  TagLibrary-->
	<!-- prefix = sf(springform)     form    .    Action,       /add -->
	<sf:form metod="post" modelAttribute="userk">
		Username: <sf:input path="username"/><sf:errors path="username"></sf:errors><br/>
		Password: <sf:input path="password"/><sf:errors path="password"></sf:errors><br/>
		Nickname: <sf:input path="nickname"/><br/>
		Email:<sf:input path="email"/><sf:errors path="email"></sf:errors><br/>
		<input type="submit" value="    "/>
	</sf:form>
===以下はadd.jspの内容が合法かどうかを検証することです.
Validataを追加して、ユーザーの入力が適法かどうかを確認します.
Step 1.First step is plug-n jar package.
JSR 303
google and download:bean-validator.jar
paste it to/WebContent/WEB-INF/lib/
Step 2.File:edu/bit/model/User.java
	>>Line: 14
	>>@NotEmpty(message="username cannot be empty!")
	public String getUsername(){
		return username;
	}
	
	>>import org.hibernate.validator.constraints.NotEmpty;
   As the same,we can use@Size(min=1,max=10,message=「password length must be 1-10」)
	>>import org.hibernate.validator.constraints.Size;
   We can also use@Email(message=「invalid email format!」)
	>>import org.hibernate.validator.constraints.Email
Step 3:File:「UserController.java」 
3.1 Creat Model:
	//RequestMapping(value="/add", method=RequestMethod.GET)
	//public String add(Model model){
	>>
	public String add(@ModelAttribute("userk") User user){	//Another kind of Create model for add.jsp @@        
3.2
	//public String add(User myuser, String abc){
	public String add(@Validated User myuser, BindingResult bResult){ 	
					//add Validation here,     Validate
		if (bResult.hasErrors()){
			//     ,     add    ,  add.jsp       
			return "user/add";
		}
	>>import org.springframework.validation.annotation.Validated;
Step 4:File:「add.jsp」
//addTag into the origginal code ad below:
	<sf:form metod="post" modelAttribute="userk"><span style="white-space:pre">		</span><!--userk UserController.java  userk  model     -->
		Username: <sf:input path="username"/><sf:errors path="username"></sf:errors><br/>
		Password: <sf:input path="password"/><sf:errors path="password"></sf:errors><br/>
		Nickname: <sf:input path="nickname"/><br/>
		Email:<sf:input path="email"/><sf:errors path="email"></sf:errors><br/>
		<input type="submit" value="    "/>
	</sf:form>
質問があります.Step 3の(@ModelAttribute(user)User kuser)の中の「user」はどこのuserに対応していますか?これはよく分かりません.
次のブログを詳しく翻訳します.model.addAttributeの使い方について.
http://krams915.blogspot.com/2010/12/spring-3-mvc-using-modelattribute-in.html