CRUD C:作成します R:retieve:お問い合わせ U:アップデート:修正 D:削除:削除 残り クエリIDの従業員に代わって/のemp / 1 GET 1 従業員の1のために変更され、IDの代わりに/ EMPが/ 1プット / emp表/ 1従業員1に代わって削除IDを削除 / EMPが、新たな従業員代表を投稿します / EMPSは、すべての従業員に代わって問い合わせを取得します /indexemp.jsp ---> ---> empList.jspに転送EMPS要求は、すべての従業員データを表示します 追加: empList.jspの従業員が--->クエリは、ページのすべての情報部門を表示するには、[追加]をクリックします - >ページ(addEmp.jsp)を追加します。 - あなたが追加したい>データ - > [保存]をクリックします--->完了するために、リクエスト処理--->保存を受信するデータコントローラを保存--->ホームに戻る続行 レビュー: (、ドメインオブジェクトへの従業員の情報を修正するために、クエリをページが表示データ/ EMP / 1 GETを修正) - ページの編集]をクリックします - >変更されたページ(editemp)の従業員は--->、変更するデータを入力します/ 1 PUTリクエスト/ EMPを送信するには、[編集]ボタンをクリックしてください - >変更の従業員--->従業員一覧ページ 削除: ページで、[削除]をクリックします - >(/ EMP / 1削除)削除要求を送信する - >削除 - >メインページへ
1.EmployeeController
パッケージcom.tanzhou.controller。 インポートのjava.util.Collection; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.stereotype.Controller。 輸入org.springframework.ui.Model。 輸入org.springframework.web.bind.annotation.ModelAttribute。 輸入org.springframework.web.bind.annotation.PathVariable; 輸入org.springframework.web.bind.annotation.RequestMapping。 輸入org.springframework.web.bind.annotation.RequestMethod; 輸入org.springframework.web.bind.annotation.RequestParam。 輸入com.tanzhou.dao.DepartmentDao。 輸入com.tanzhou.dao.EmployeeDao。 輸入com.tanzhou.domain.Department。 輸入com.tanzhou.domain.Employee。 @コントローラ パブリッククラスEmployeeController { @Autowired プライベートEmployeeDao employeeDao。 @Autowired プライベートDepartmentDao departmentDao。 / ** *クエリのすべての従業員 * / @RequestMapping( "/ EMPS") パブリック文字列getEmps(モデルモデル){ コレクション<従業員> EMPSの=のemployeeDao.getEmployees(); model.addAttribute( "EMPS"、EMPS); //ドメインオブジェクトに要求を保存 「EMPLIST」を返します。 } //公務員(整数のID、文字列名、文字列の電子メール、整数性別、部署部門){ @RequestMapping( "/追加addpage") パブリック文字列追加addpage(モデルモデル){ コレクション<部署> DEPTSの=のdepartmentDao.getDepartments(); model.addAttribute( "DEPTS"、DEPTS)。 model.addAttribute( "従業員"、新しい従業員()); 「addEmp」を返します。 } @RequestMapping(値= "/ EMP"、方法= RequestMethod.POST)// 公共の文字列addEmp(従業員){ System.out.println(従業員)。 employeeDao.save(従業員); //シミュレーションを保存 「リダイレクト:/ EMPS」を返す; //は、従業員を尋ねるために直接要求した後にリダイレクトを追加 } // <a href="${pageContext.request.contextPath}/emp/${emp.id}">する</a> @RequestMapping(値= "/ EMP / {ID}"、方法= RequestMethod.GET) パブリック文字列getEmpById(@PathVariable( "ID")、整数ID、モデルモデル){ スタッフによると、//クエリID 従業員の従業員= employeeDao.getEmployee(ID)。 model.addAttribute( "従業員"、従業員)。 //すべてのセクターのためのクエリ コレクション<部署> DEPT = departmentDao.getDepartments(); model.addAttribute( "DEPTS"、DEPT)。 「editemp」を返します。 } //スタッフを変更 @RequestMapping(値= "/ EMP / {ID}"、方法= RequestMethod.PUT) 公共の文字列updateEmp(@ModelAttribute( "従業員")従業員EMP){ System.out.println(EMP)。 employeeDao.save(EMP)。 「リダイレクト:/ EMPS」を返します。 } @ModelAttribute 公共ボイドmodelAttribute(@RequestParam(値= "ID" =偽必要)整数ID、モデルモデル){ //最初のチェックの従業員IDに応じて もし(ID!= NULL){ 従業員の従業員= employeeDao.getEmployee(ID)。 model.addAttribute( "従業員"、従業員)。 } } //削除 @RequestMapping(値= "/ EMP / {ID}"、方法= RequestMethod.DELETE) パブリック文字列deleteEmp(@PathVariable( "ID")、整数ID){ //削除 employeeDao.deleteEmployee(ID)。 「リダイレクト:/ EMPS」を返します。 } }
2.EmployeeDao和DeptmentDao
パッケージcom.tanzhou.dao。 インポートのjava.util.Collection; 輸入java.util.HashMapを; 輸入java.util.Map; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.stereotype.Repository; 輸入com.tanzhou.domain.Department。 輸入com.tanzhou.domain.Employee。 @倉庫 パブリッククラスEmployeeDao { @Autowired プライベートDepartmentDaoのDDAO。 プライベート静的地図<整数、従業員>マップ= NULL; //公務員(整数のID、文字列名、文字列の電子メール、 //整数のセックス、部門部門){ 静的{ マップ=新しいHashMapの<>(); map.put(1、新入社員(1、 "王A"、 "[email protected]"、1、新たな部門(1、 "研发部")))。 map.put(2、新たな従業員(2、 "王B"、 "[email protected]"、2、新たな部門(2、 "市场部")))。 map.put(3、新しい従業員(3、 "王C"、 "[email protected]"、1、新しい部門(3、 "策划部")))。 map.put(4、新しい従業員(4、 "王D"、 "[email protected]"、2、新たな部門(2、 "市场部")))。 map.put(5、新しい従業員(5、 "王E"、 "[email protected]"、1、新たな部門(1、 "研发部")))。 } プライベート静的整数= 5をinitid。 / ** *追加または編集 *入ってくるオブジェクトIDは変更に代わって、存在する場合 *新しいのに代わって、着信オブジェクトIDがない場合 * @Param EMP * / (従業員EMP)のセーブます。public void { IF(emp.getId()== NULL){ emp.setId(initid ++); } emp.setDepartment(ddao.getDepartment(emp.getDepartment()getDid())); map.put(emp.getId()、EMP)。 } / ** *すべての従業員を取得します。 * @return * / パブリックコレクション<従業員>のGetEmployees(){ map.valuesを返します(); } / ** *クエリの従業員オブジェクトIDによると、 * @paramのID * @return * / 公務員GETEMPLOYEE(整数ID){ map.get(ID)を返します。 } / ** * IDに基づいて従業員を削除します。 * @paramのID * / 公共ボイドdeleteEmployee(整数ID){ map.remove(ID)。 } } パッケージcom.tanzhou.dao。 インポートのjava.util.Collection; 輸入java.util.HashMapを; 輸入java.util.Map; 輸入org.springframework.stereotype.Repository; 輸入com.tanzhou.domain.Department。 @倉庫 パブリッククラスDepartmentDao { プライベート静的地図<整数、部門>マップ= NULL; 静的{ マップ=新しいHashMapの<>(); map.put(1、新たな部門(1、 "R&D"))。 map.put(2、新部門(2、 "マーケティング")); map.put(3、新しい部門(3、 "企画部")); } //すべての情報部門を取得します パブリックコレクション<課> getDepartments(){ map.valuesを返します(); } //セクターの問い合わせに対応する部門番号によると、 公共部門getDepartment(整数がしました){ map.getを返す(やりました)。 } }
3.jspページ
addEmp.jsp
<%@ページ言語= "javaの" contentTypeの= "text / htmlの;のcharset = UTF-8" pageEncodingは= "UTF-8" %> <%@ taglibの接頭辞= "C" のuri = "http://java.sun.com/jsp/jstl/core" %> <%@ taglibの接頭辞= "フォーム" のuri = "http://www.springframework.org/tags/form" %> <!DOCTYPE htmlののPUBLIC " - // W3C // DTD HTML 4.01移行// EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <ヘッド> <META HTTP-当量= "Content-Typeの" コンテンツ= "text / htmlの;のcharset = UTF-8"> <タイトル>ここで挿入タイトル</ TITLE> </ head>の <身体> <H1>追加従業員情報</ H1> < - あなたが直接結合モデルデータの属性やhtmlページ上の要素を形成することができる:! formタグ 1.インポートフォームタグライブラリ modelAttribute - > <FORM:フォームアクション= "$ {pageContext.request.contextPath} / EMP" modelAttribute = "従業員"> <! - 1.pathは、元のアイテムのhtmlinputラベルの名前は、オブジェクトモデルデータ用2.自動バックプロパティ値大幅です - > 従業員名:<フォーム:入力パス= "名前" /> <BR/> スタッフのEメール:<フォーム:入力パス= "メール" /> <BR/> 男:の<input type = "ラジオ" NAME = "性別" 値= "1"> <BR/> 女:の<input type = "ラジオ" NAME = "性別" 値= "2"> <BR/> スタッフ部門: < - 代表コレクション、自動トラバーサルを横断する:!アイテム、すべてのセクタのうち、各対象オブジェクトを横切ります ITEMLABELは:ラベル体としての属性値オプションオブジェクトのうち横切るように指定します。 itemValueは:ラベル体としての属性値オプションオブジェクトのうち横切るように指定します。 - > <FORM:セレクトパス= "department.did" 商品= "$ {DEPTS}" ITEMLABELは= "DNAME" itemValueは= "ました"> </フォーム:選択> <入力タイプ=値=「従業員を追加」「送信」> </フォーム:フォーム> <% - <フォームアクション= ""> 员工姓名:の<input type = "text" NAME = "名前"> <BR/> スタッフのEメール:の<input type = "text" NAME = "メール"> <BR/> 従業員の性別:<BR/> 男:の<input type = "ラジオ" NAME = "性別" 値= "1"> <BR/> 女:の<input type = "ラジオ" NAME = "性別" 値= "2"> <BR/> スタッフ部門: <= "department.did" 名前を選択> <C:のforeachアイテム= "$ {DEPTS}" VAR = "DEPT"> <オプション値= "$ {dept.did}"> $ {dept.dname} </オプション> </ C:forEachの> </ select>の <input type = "提出" 値= "提交"> </フォーム> - %> </ BODY> </ HTML>
editEmp.jsp
<%@ページ言語= "javaの" contentTypeの= "text / htmlの;のcharset = UTF-8" pageEncodingは= "UTF-8" %> <%@ taglibの接頭辞= "フォーム" のuri = "http://www.springframework.org/tags/form" %> <!DOCTYPE htmlののPUBLIC " - // W3C // DTD HTML 4.01移行// EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <ヘッド> <META HTTP-当量= "Content-Typeの" コンテンツ= "text / htmlの;のcharset = UTF-8"> <タイトル>変更し、従業員</ TITLE> </ head>の <身体> <H1>は、従業員の情報を修正する</ H1> <FORM:フォームメソッド= "POST" modelAttribute = "従業員" ACTION = "$ {pageContext.request.contextPath} / EMP / $ {employee.id}"> <input type = "隠された" 名前= "_方式" 値= "置きます"> <input type = "隠れた" NAME = "ID" 値= "$ {employee.id}"> スタッフのEメール:<フォーム:入力パス= "メール" /> <BR/> 男:<FORM:ラジオボタンパス= "性別" 値= "1" /> 女:: <フォーム:ラジオボタンのパス= "セックス" 値= "2" /> <BR/> スタッフ部門: <FORM:セレクトパス= "department.did" 商品= "$ {DEPTS}" ITEMLABELは= "DNAME" itemValueは= "ました"> </フォーム:選択> <入力タイプ=「提出」値=「従業員を変更します」> </フォーム:フォーム> </ BODY> </ HTML>
empList.jsp
<%@ページ言語= "javaの" contentTypeの= "text / htmlの;のcharset = UTF-8" pageEncodingは= "UTF-8" %> <%@ taglibの接頭辞= "C" のuri = "http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE htmlののPUBLIC " - // W3C // DTD HTML 4.01移行// EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <ヘッド> <META HTTP-当量= "Content-Typeの" コンテンツ= "text / htmlの;のcharset = UTF-8"> <タイトル>ここで挿入タイトル</ TITLE> <スクリプトタイプ= "テキスト/ javascriptの" srcが= "$ {pageContext.request.contextPath} /jq/jquery-3.4.1.min.js"> </ SCRIPT> ます。<script type = "text / javascriptの"> $(関数(){ 警告( "AAA")。 }) </ SCRIPT> <! - 静的リソースとspringmvcの契約: URLパターンで構成されたweb.xmlファイル:/は、JSPを除いて、すべての要求を処理するために使用され HTTPを送信:// localhostを:8080 / springmvcday04 / JQ / jqueryの-3.4.1.min.js フロントコントローラは、受信して処理し、対応する制御処理の定義方法に対応していないので、404が存在します ソリューション: JS要求は、フロントコントローラの処理をさせないように 対策: 最初:のweb.xmlのurl-patternを変更:/ *アクション、あなたは残りのスタイルを使用するプロジェクトは、サポートが良くない場合。 第二: springmvcタグ付けされたプロファイルで<MVC:デフォルト・サーブレット・ハンドラ/> 追加する必要があるので、しかし要求して、動的なラベルが表示されます見つけることができませんでした<MVC:注釈駆動型> </ MVC:注釈駆動型> 一緒の使用に - > </ head>の <身体> <H1>従業員ページのリストへようこそ</ H1> <テーブルのボーダー= "1"> <TR> <TH>従業員ID </目> <TH>従業員名</目> <TH>スタッフEメール</目> <TH>スタッフの性別</目> <TH>ここで、部門</目> <TH>変更</目> <TH> </目>削除 </ TR> <C:のforeachアイテム= "$ {EMPS}" VAR = "EMP"> <TR> <TD> $ {emp.id} </ TD> <TD> $ {emp.name} </ TD> <TD> $ {emp.email} </ TD> <TD> $ {emp.sex == 1 "男"?: "女"} </ TD> <TD> $ {emp.department.dname} </ TD> <TD> <a href="${pageContext.request.contextPath}/emp/${emp.id}">修改する</a> </ TD> <TD> <FORM ACTION = "$ {pageContext.request.contextPath} / EMP / $ {emp.id}" METHOD = "POST"> <input type = "隠れた" NAME = "_メソッド" 値= "削除"> <入力タイプ=「提出」値=「従業員を削除」> </フォーム> </ TD> </ TR> </ C:forEachの> </ TABLE> <a href="addpage">スタッフを追加する</a> </ BODY> </ HTML>