• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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}&nbsp;
                        </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】可獲取本節源碼。

     

    版權聲明:本文為cnds123321原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/cnds123321/article/details/103092990

    智能推薦

    表單標簽庫與數據綁定

    表單標簽庫 表單標簽庫中包含了可以用在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中表單分為以下三部分: 表單控件,提示信息和表單域三部分組成。 表單控件: 包含了具體的表單功能項,如單行文本輸入,密碼輸入,復選框,單選框,提交按鈕,重置按鈕等 提示信息: 一個表單中通常還需要包含一些說明性的文字,提示用戶進行填寫和操作。 表單域: 相當于一個容器,用來容納表單控件和提...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡