SpringMVC(9)——表單標簽庫
標簽: SpringMVVC
概述
表單標簽庫中包含了可以用在JSP頁面中渲染HTML元素的標簽。
JSP頁面中使用Spring表單標簽庫時,必須在JSP頁面開頭處聲明taglib指令:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
在表單標簽庫中有form、input、password、hidden、textarea、checkbox、checkboxes、
radiobutton、Iradiobuttons、select、option、options、errors等標簽。
常用標簽
表單標簽
語法:
<form:form modelAttribute="" method="post" servletRelativeAction="">
</form:form>
表單標簽除了具有HTML表單元素屬性以外,還具有acceptCharset、commandName、
cssSClass、cssStyle、htmlEscape和modelAttribute等屬性。
- acceptCharset:定義服務器接受的字符編碼列表。
- commandName:暴露表單對象的模型屬性名稱,默認為command。
- cssClass:定義應用到form元素的CSS類。
- cssStyle:定義應用到form元素的CSS樣式。
- htmlEscape:true或false,表示是否進行HTML轉義。
- modelAttribute:暴露form backing object的模型屬性名稱,默認為command。
其中,commandName和modelAttribute屬性的功能基本一致,屬性值綁定一個JavaBean對象。
input標簽
語法:
<form:input path="xxx"/>
該標簽有cssClass、cssStyle、htmlEscape及path屬性。
path屬性將文本框輸入值綁定到form backing object上。
password標簽
語法:
<form:password path="xxx"/>
hidden標簽
語法:
<form:hidden path="xxx"/>
表示隱藏的元素,故不支持cssClass和cssStyle屬性。
textarea標簽
語法:
<form:textarea path="xxx"/>
checkbox標簽
語法:
<form:checkbox path="xxx" value="xxx"/>
多個path相同的checkbox標簽,它們是一個選項組,允許多選,選項值綁定到一個數組屬性。
例:
<form:checkbox path="language" value="漢語"/>漢語
<form:checkbox path="language" value="英語"/>英語
<form:checkbox path="language" value="俄語"/>俄語
<form:checkbox path="language" value="拉丁語"/>拉丁語
<form:checkbox path="language" value="法語"/>法語
checkboxes標簽
與多個path相同的checkbox標簽功能相同。
三個重要屬性:
- items:用于生成input元素的Collection、Map或Array。
- itemLabel:items屬性中指定的集合對象的屬性,為每個input元素提供label。
- itemValue:items屬性中指定的集合對象的屬性,為每個input元素提供value。
語法:
<form:checkboxes items="xxx" path="xxx"/>
radiobutton標簽
語法:
<form:radiobutton path="xxx" value="xxx"/>
多個path相同的radiobutton標簽是一個選項組,只支持單選。
radiobuttons標簽
語法:
<form:radiobuttons path="xxx" items="xxx"/>
等價于多個path形同的radiobutton標簽,也只支持單選。
select標簽
語法:
<form:select path="xxx" items="xxx"/>
或
<form:select path="xxx" items="xxx">
<option value="xxx">xxx</option>
</form:select>
或
<form:select path="xxx">
<form:options items="xxx"/>
</form:select>
select標簽的選項來自屬性items指定集合或者嵌套的option標簽或options標簽。
options標簽
和select標簽嵌套使用。
errors標簽
渲染一個或者多個的span元素,每個span元素包含一個錯誤消息。
顯示所有錯誤消息的語法:
<form:errors path="*"/>
顯示特定的錯誤消息的語法:
<form:errors path="xxx"/>
實例
本項目要用到的jar包:
創建springmvc項目并按照下圖創建文件及文件夾:
各文件代碼如下:
StudentController.java
package springmvcdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import springmvcdemo.pojo.Student;
import springmvcdemo.service.StudentService;
import java.util.ArrayList;
import java.util.HashMap;
@Controller
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("input")
public String inputUser(Model model) {
HashMap<java.lang.String, java.lang.String> hobbys = new HashMap<>();
hobbys.put("閱讀", "閱讀");
hobbys.put("運動", "運動");
hobbys.put("游戲", "游戲");
hobbys.put("旅行", "旅行");
model.addAttribute("student", new Student());
model.addAttribute("hobbys", hobbys);
model.addAttribute("studentClass", new java.lang.String[]{"高三1班", "高三2班", "高三3班"});
return "studentAdd";
}
@RequestMapping("/addStudent")
public String addStudent(@ModelAttribute Student student, Model model) {
if (studentService.addStudent(student)) {
System.out.println("添加成功");
return "redirect:/student/studentsList";
} else {
System.out.println("添加失敗");
HashMap<java.lang.String, java.lang.String> hobbys = new HashMap<>();
hobbys.put("閱讀", "閱讀");
hobbys.put("運動", "運動");
hobbys.put("游戲", "游戲");
hobbys.put("旅行", "旅行");
// 不需要model.addAttribute(),因為@ModelAttribute指定了form backing object
// model.addAttribute("student",new Student());
model.addAttribute("hobbys", hobbys);
model.addAttribute("studentClass", new java.lang.String[]{"高三1班", "高三2班", "高三3班"});
return "studentAdd";
}
}
@RequestMapping("studentsList")
public String studentsList(Model model) {
ArrayList<Student> students = studentService.getStudents();
model.addAttribute("students", students);
return "studentsList";
}
}
Student.java
package springmvcdemo.pojo;
public class Student {
private String name;
private String sex;
private String[] hobby;
private String studentClass;
private String memo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public String getStudentClass() {
return studentClass;
}
public void setStudentClass(String studentClass) {
this.studentClass = studentClass;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
StudentService.java
package springmvcdemo.service;
import springmvcdemo.pojo.Student;
import java.util.ArrayList;
public interface StudentService {
/**
* 添加學生
*
* @param student 學生
* @return 返回是否添加成功,如果是true則添加成功,false表示沒有添加成功
*/
boolean addStudent(Student student);
/**
* 獲取學生
*
* @return 返回學生集
*/
ArrayList<Student> getStudents();
}
StudentServiceImpl.java
package springmvcdemo.service;
import org.springframework.stereotype.Service;
import springmvcdemo.pojo.Student;
import java.util.ArrayList;
@Service
public class StudentServiceImpl implements StudentService{
private static ArrayList<Student> students=new ArrayList<>();
@Override
public boolean addStudent(Student student) {
if (!"張三".equals(student.getName())) {
students.add(student);
return true;
}
return false;
}
@Override
public ArrayList<Student> getStudents() {
return students;
}
}
springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--使用掃描機制掃描控制器類,控制器類都在controller包及其子包下-->
<context:component-scan base-package="springmvcdemo.controller"/>
<!--使用掃描機制掃描服務類,服務類都在service包及其子包下-->
<context:component-scan base-package="springmvcdemo.service"/>
<!--配置視圖解析器-->
<!--配置視圖解析器成功后,RegisterController和LoginController控制器類的視圖路徑僅需提供register和login,視圖解析器將會自動添加前綴和后綴-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前綴-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后綴-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
studentAdd.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加學生</title>
</head>
<body>
<form:form modelAttribute="student" method="post" action="/student/addStudent">
姓名:<form:input path="name"/><br>
性別:<form:radiobutton path="sex" value="男"/>男
<form:radiobutton path="sex" value="女"/>女<br/>
愛好:<form:checkboxes path="hobby" items="${hobbys}"/><br/>
班級:<form:select path="studentClass">
<form:option value="請選擇班級">請選擇班級</form:option>
<form:options items="${studentClass}"/>
</form:select><br/>
備注:<form:textarea path="memo" rows="5"/><br/>
<input type="reset" id="reset">
<input type="submit" id="submit" value="添加學生">
</form:form>
</body>
</html>
studentList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>學生列表</title>
</head>
<body>
<h1>學生列表</h1><br>
<a href="/student/input">繼續添加</a>
<table>
<tr>
<th>姓名</th>
<th>性別</th>
<th>愛好</th>
<th>班級</th>
<th>備注</th>
</tr>
<c:forEach items="${students}" var="student">
<tr>
<td>${student.name}</td>
<td>${student.sex}</td>
<td>
<c:forEach items="${student.hobby}" var="hobby">
${hobby}
</c:forEach>
</td>
<td>${student.studentClass}</td>
<td>${student.memo}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--部署DispatcherServlet-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加載Spring MVC的配置文件,配置文件可以放在項目目錄的任意位置,使用init-param元素加載配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!--配置文件的位置-->
<param-value>/WEB-INF/config/springmvc-config/springmvc-servlet.xml</param-value>
</init-param>
<!--表示容器在啟動時立即加載servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!--處理所有URL-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--避免中文亂碼-->
<filter>
<filter-name>characterEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
運行效果
點擊【添加學生】按鈕
點擊【繼續添加】超鏈接即可繼續添加。
如果添加失敗,表單中的信息也不會消失。(例如添加姓名為張三的學生)
這是數據綁定的自動回填(但必須結合form標簽)。
如果對完整源碼有興趣。
可搜索微信公眾號【Java實例程序】或者掃描下方二維碼關注公眾號獲取更多。
注意:在公眾號后臺回復【CSDN201911160941】可獲取本節源碼。
智能推薦
表單標簽庫與數據綁定
表單標簽庫 表單標簽庫中包含了可以用在JSP頁面中渲染HTML元素的標簽。在JSP頁面使用表單標簽庫時,需要在JSP頁面開頭處聲明taglib指令: <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> form表單標簽 form表單標簽是渲染表單元素...
使用MVC的JSP表單標簽庫處理表單
JSP表單標簽庫的作用 (1)創建視圖。類似于html中表單的作用,可以用mvc的表單標簽庫來創建視圖,獲取用戶數據。 (2)與模型類的綁定功能。可以便捷地將HTTP請求的參數映射到模型中。 配置表單標簽庫 需要在jsp頁面加一句: 常用的幾個標簽 (1)表單標簽 創建一個表單 ModelAttribute參數設置要綁定的bean實例 Action設置表單提交后訪問的資源url (2...
springmvc筆記-4-標簽庫
1.form 2.input 3.password 4.hidden 5.textarea 6.checkbox和checkboxes 7.radiobutton和radiobuttons 8.select 9.option和options 10.errors springmvc的表單標簽庫實現類在spring-webmvc.jar,標簽庫的描述文件在spring-form.tld 要是用spri...
springMVC之form標簽庫的使用
springMVC之form標簽庫的使用 今天有點兒小收獲,關于springMVC的form標簽庫,接觸了之后發現這東西用起來是真的方便。在這里記錄一下,主要是關于<form:from>和<form:select>標簽的使用。 使用第一步引入form標簽庫: <%@ taglib uri=“http://www.springframework.org/ta...
表單標簽
表單的作用: 是為了收集用戶的信息,在網頁上創建一個表單,用于與客戶交互,讓客戶填寫相對應的信息。 在html中表單分為以下三部分: 表單控件,提示信息和表單域三部分組成。 表單控件: 包含了具體的表單功能項,如單行文本輸入,密碼輸入,復選框,單選框,提交按鈕,重置按鈕等 提示信息: 一個表單中通常還需要包含一些說明性的文字,提示用戶進行填寫和操作。 表單域: 相當于一個容器,用來容納表單控件和提...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...