springmvc02

1,創建實體類對象User

???注意要導入 bean-validator.jar?包

package com.yangw.springmvc.entity;import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.NumberFormat;
import org.springframework.format.annotation.NumberFormat.Style; /***
  * 這里的這幾個注解是用來驗證字段的
  */
public class User {@NotEmpty(message="用戶名不能為空")private String name;@Length(min=3 ,max=10,message="密碼長度應該在3-10之間")private String password;@NumberFormat(style=Style.NUMBER)@Range(min=1,max=100,message="年齡應該在1-100之間")private int age;public User() {}public User(String name, String password, int age) {this.name = name;this.password = password;this.age = age;}/**
    *get set方法這里略去
    */
}/*** Springmvc作服務器端驗證更加簡單* 它支持 JSR303 ,JSR是sun公司專門為java來更新的每一個標準* bean-validator.jar 是hibernate的jar包*/

2,在UserController類中完成 User的添加,顯示所有內容

package com.yangw.springmvc.controller;import java.util.HashMap;
import java.util.Map;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;import com.yangw.springmvc.entity.User;@Controller
@RequestMapping(value="/user")
public class UserController{private Map<String,User> users = new HashMap<String,User>();public UserController(){users.put("yangw", new User("yangw","123456",24));users.put("ganw", new User("ganw","123456",25));users.put("wangw", new User("wangw","123456",27));}//只有get請求才處理@RequestMapping(value="/users",method=RequestMethod.GET )public String list(Model model){model.addAttribute("users", users);return "user/list"; }//    //鏈接到add頁面時是GET請求,會訪問這段代碼
//    @RequestMapping(value="/add",method=RequestMethod.GET )
//    public String add(Model model){
//        //這里需要提供一個User對象,因為添加的頁面
//     第一種方式    model.addAttribute(new User());//        //直接返回到add頁面
//        return "user/add"; 
//    }//鏈接到add頁面時是GET請求,會訪問這段代碼@RequestMapping(value="/add",method=RequestMethod.GET )public String add(@ModelAttribute(value="user") User user){//第二種提供一個User對象的方式,因為添加的頁面return "user/add"; }//鏈接到add頁面時是POST請求,會訪問這段代碼@RequestMapping(value="/add",method=RequestMethod.POST)//這個User是一個要被驗證的對象,使用@Validated說明;//緊跟@Validated來寫驗證結果類,用BindingResult表示public String add(@Validated User user,BindingResult br){if(br.hasErrors()){//如果有錯誤,到add界面顯示return "user/add";}users.put(user.getName(), user);return "redirect:/user/users"; }}

3,list.jsp頁面

? 注意加入標簽庫的jar包 jsf-api.jar jsf-impl.jar jstl-1.2.jar

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body><a href="add">添加用戶</a><br/><c:forEach items="${users }" var="um" ><!-- 這里的um是一個個的 鍵值對 -->${um.key}---${um.value.name }---${um.value.password }----${um.value.age } <br/></c:forEach>
</body>
</html>

4,add.jsp頁面

  用到了springmvc的form表單

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>添加用戶</title>
</head>
<body><!-- 設置為post請求,并且會自動將表單中的值添加到user中 --><!-- 此時沒有寫action,直接提交會提交給/add --><sf:form method="post" modelAttribute="user"><!--  sf:input path屬性 中設置user對象的屬性名 --><!--這個是服務器端驗證 sf:errors 標簽來輸出 驗證的錯誤信息 -->username:<sf:input path="name"/> <sf:errors path="name"/><br/>password:<sf:password path="password"/><sf:errors path="password"/><br/>age:<sf:input path="age"/><sf:errors path="age"/><br/><input type="submit" value="提交" /></sf:form>
</body>
</html>

5,web.xml增加編碼過濾器

<filter><filter-name>characterEncoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>

?

6,顯示一個用戶詳細信息

    /*** @PathVariable:路徑中的變量**/@RequestMapping(value="/{name}",method=RequestMethod.GET)public String show(@PathVariable String name,Model model){model.addAttribute(users.get(name));return "/user/show"; }

??? show.jsp頁面

<body>username:${user.name }<br/>password:${user.password}<br/>age:${user.age }</body>

??? 為list頁面的增加超級鏈接

<c:forEach items="${users }" var="um" ><!-- 這里的um是一個個的 鍵值對 -->${um.key}---<a href="${um.value.name }">${um.value.name }</a>---${um.value.password }----${um.value.age } <br/></c:forEach>

7,用戶的刪除,更新

/*** 修改用戶,獲取原始用戶頁面信息**/@RequestMapping(value="/{name}/update",method=RequestMethod.GET)public String update(@PathVariable String name,Model model){model.addAttribute(users.get(name));return "/user/update"; }/*** 修改用戶,對提交的數據進行更新操作**/@RequestMapping(value="/{name}/update",method=RequestMethod.POST)public String update(@Validated User user,BindingResult br){if(br.hasErrors()){//如果有錯誤,到add界面顯示return "user/update";}users.put(user.getName(), user);return "redirect:/user/users"; }/*** 刪除用戶**/@RequestMapping(value="/{name}/delete",method=RequestMethod.GET)public String delete(@PathVariable String name){users.remove(name);return "redirect:/user/users"; }

??? update.jsp?和 list.jsp

update.jsp頁面 與add.jsp其實一樣<body><!-- 設置為post請求,并且會自動將表單中的值添加到user中 --><!-- 此時沒有寫action,直接提交會提交給/update --><sf:form method="post" modelAttribute="user">username:<sf:input path="name"/> <sf:errors path="name"/><br/>password:<sf:password path="password"/><sf:errors path="password"/><br/>age:<sf:input path="age"/><sf:errors path="age"/><br/><input type="submit" value="提交" /></sf:form>
</body>
 <c:forEach items="${users }" var="um" ><!-- 這里的um是一個個的 鍵值對 -->${um.key}---<a href="${um.value.name }">${um.value.name }</a>---${um.value.password }----${um.value.age } ----<a href="${um.value.name }/update">更新</a>---<a href="${um.value.name }/delete">刪除</a><br/></c:forEach>

?

轉載于:https://www.cnblogs.com/yangw/p/3434627.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259136.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259136.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259136.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用基本信號畫出如下的信號_股市入門基本知識丨下跌時期可以抄底的安全信號有哪些...

點擊藍色字體 關注我們 帶來更多精彩股票市場中的秘籍其實就是“低買高賣”&#xff0c;不過我們不能在大盤一開始下跌的時候就進行買入&#xff0c;因為不清楚下跌的時間&#xff0c;太早介入&#xff0c;只有在反彈幅度超出我們介入的點的時候才可以進行高賣。那么什么時候才…

Flume數據傳輸事務分析[轉]

本文基于ThriftSource,MemoryChannel,HdfsSink三個組件&#xff0c;對Flume數據傳輸的事務進行分析&#xff0c;如果使用的是其他組件&#xff0c;Flume事務具體的處理方式將會不同。一般情況下&#xff0c;用MemoryChannel就好了&#xff0c;我們公司用的就是這個&#xff0c;…

最近的一些校招試題摘錄

最近又參加了一些校招&#xff0c;真是馬不停蹄啊。多參加考試是好的&#xff0c;可以不斷發現一些新的問題。下面摘錄一些我不太會的題。 1.volatile的作用是什么&#xff1f; 答案&#xff1a;volatile是類型修飾符&#xff0c;用它修飾的類型變量可能會被編譯器未知的因素…

yii2中的rules驗證規則

2019獨角獸企業重金招聘Python工程師標準>>> Rules驗證規則&#xff1a;required : 必須值驗證屬性||CRequiredValidator 的別名, 確保了特性不為空.[[字段名],required,requiredValue>必填值,message>提示信息];email : 郵箱驗證||CEmailValidator 的別名,確…

weblogic數據源配置的問題,weblogic密碼破解

weblogic 報錯 please increase XXX,得知是連接池出了問題&#xff0c;查看weblogic配置&#xff0c;發現沒有設置超時 查看oracle 當前session&#xff0c;可以看到連接的機器&#xff0c;用戶&#xff0c;當前執行的sqlid select * from v$session; select v$sql where sql_i…

自己寫的簡易多任務系統---基于pic18fxxx

這個工程只是實現了最簡單的OS任務調度&#xff0c;對于理解任務調度有點幫助。其實就是從UC/OS-II里面摘出來的&#xff0c;沒有原來的那么復雜&#xff0c;很精簡&#xff0c;但道理上是一樣的。工程中的CPU.C文件時直接拿Nathan Brown寫好的&#xff0c;因為關于PIC任務切換…

python語言整數類型-Python 的內置數值類型

Python 是一種敏捷的、動態類型化的、極富表現力的開源編程語言&#xff0c;可以被自由地安裝到多種平臺上。Python 代碼是被解釋的。如果您對編輯、構建和執行循環較為熟悉&#xff0c;則 Python 代碼對您來說更簡單。但是&#xff0c;請不要搞錯&#xff1a;Python 器可以是簡…

滴滴出行2016校招編程題

1. 給定一個m*n的數組&#xff08;m,n>2,數組值>0&#xff09;&#xff0c;要求選出和最大的子2*2數組。例如&#xff1a; 1 2 3 4 5 6 7 8 9 顯然和最大的2*2子數組是5 6;8 9.下面完成這個功能。 Input: &#xff08;m*n的數組&#xff09; 1 2 3 ; 4 5 6 ; 7 8 9 …

每天一個linux命令(22):find 命令的參數詳解

find一些常用參數的一些常用實例和一些具體用法和注意事項。 1&#xff0e;使用name選項&#xff1a; 文件名選項是find命令最常用的選項&#xff0c;要么單獨使用該選項&#xff0c;要么和其他選項一起使用。 可以使用某種文件名模式來匹配文件&#xff0c;記住要用引號將文件…

(WPF) DataGrid之綁定

通過ObservableCollection 綁定到 DataGrid. 1. 前臺Xaml. <DataGrid x:Name"dgMeasurements"HorizontalAlignment"Left"Margin"10,69,0,10"ItemsSource"{Binding}"AutoGenerateColumns"False"Width"370">…

程序=數據結構+算法

這句名言&#xff0c;我現在品來很有感覺&#xff0c;看看uc/os-II里面那些就緒表、查找最高優先級任務等等&#xff0c;算法設計的非常巧妙&#xff0c;整個OS都是圍繞著OS_TCB來運轉的&#xff0c;任務需要通信&#xff0c;那就在建立個OS_EVENT&#xff0c;通過.*OSTCBEvent…

去哪筆試兩題

1&#xff0c;a是一個有序數組&#xff0c;但經過向右移動數位&#xff0c;現在預在a中查找元素key的位置&#xff0c;如不存在&#xff0c;返回0。例如a[5,6.7.8,1,2,3,4]. 實現&#xff1a; 1 #quna12 def findPos(a,key):3 mina[0];4 for i in range(len(a)):5 …

MySQL5.6主從復制搭建基于日志(binlog)

什么是MySQL主從復制 簡單來說&#xff0c;就是保證主SQL&#xff08;Master&#xff09;和從SQL&#xff08;Slave&#xff09;的數據是一致性的&#xff0c;向Master插入數據后&#xff0c;Slave會自動從Master把修改的數據同步過來&#xff08;有一定的延遲&#xff09;&…

opengl 如何加陰影_動漫嘴唇厚涂如何繪制?厚涂嘴唇正確畫法

動漫嘴唇厚涂如何繪制&#xff1f;厚涂嘴唇正確畫法&#xff01;嘴巴怎么畫&#xff1f;畫嘴巴真的很考驗一個畫師功力&#xff0c;好看的嘴巴生動而豐滿&#xff0c;可以給整幅畫作添上亮點&#xff0c;而畫的不好的嘴巴呢&#xff0c;就容易把畫面整體的風格打破。那么零基礎…

位運算

我們復習一下位運算&#xff0c;這里介紹一下(& ,|, ^)的用途。 按位與 ------------& 規則&#xff1a; 0&00 0&10 1&0 0 1&11 &#xff08; 兩位為1&#xff0c;才是1&#xff09;作用&#xff1a; 清零與保位。通常用來將特定的位清零&…

詳解JMeter函數和變量

詳解JMeter函數和變量&#xff08;1&#xff09; JMeter函數可以被認為是某種特殊的變量&#xff0c;它們可以被采樣器或者其他測試元件所引用。函數調用的語法如下&#xff1a; ${__functionName(var1,var2,var3)} 其中&#xff0c;__functionName匹配被調用的函數名稱。用圓括…

信號反射

突然想起來前幾天調試CAN通訊的時候出現的BUG&#xff0c;那就是傳說中的“信號反射”&#xff0c;也有稱“振鈴”的。錯誤剛出現的時候沒有意識過來&#xff0c;還說怎么出現重復出現這么多條消息呢&#xff1f;光在書本上看到過這個概念&#xff0c;沒有“實物”與之對應起來…

hdu 5199 map或二分或哈希

題目描述&#xff1a;給出n棵樹的高度&#xff0c;每棵樹上都站著一只鳥&#xff0c;槍手Jack站在最左邊那棵樹的左邊對鳥進行射擊&#xff0c;當Jack在高度為H的地方向右發射一顆子彈的時候&#xff0c;高度為H的樹上的鳥兒就會掉落&#xff08;注&#xff1a;其他樹上的鳥兒不…

數字電路實驗怎么接線視頻講解_家庭影院中音箱、功放、投影機、4K播放機不知道怎么連接?手把手教你...

家庭影院中音箱、功放、投影機、4K播放機不知道怎么連接&#xff1f;手把手教你有不少用戶收到從家庭影院器材之后&#xff0c;表示完全不會連接。翻看說明書也覺得頭大&#xff0c;知識太多&#xff0c;然而卻很難找到要點。今天主要跟大家講講如何連接音箱、功放、投影機和影…

.NET開發過程中的全文索引使用技巧之Solr

前言&#xff1a;相信許多人都聽說過.net開發過程中基于Lucene.net實現的全文索引&#xff0c;而Solr是一個高性能&#xff0c;基于Lucene的全文搜索服務器。同時對其進行了擴展&#xff0c;提供了比Lucene更為豐富的查詢語言&#xff0c;同時實現了可配置、可擴展并對查詢性能…