springmv表單標籤庫

在這裏插入圖片描述

1.1:form:form標籤

Handler

@Controller
@RequestMapping("/tags")
public class TagHandler {

    @GetMapping("/get")
    public String get(Model model){
        Student student = new Student(1,"tom",22);
        model.addAttribute("student",student);
        return "tag";
    }
}

傳統form寫法

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="" method="">
        學生ID:<input type="text" name="id" value="${student.id}">
        學生姓名:<input type="text" name="name" value="${student.name}">
        學生年齡:<input type="text" name="age" value="${student.age}">
    </form>
</body>
</html>

使用spring mvc的表單標籤的寫法

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form:form modelAttribute="student">
        學生ID:<form:input path="id"/>
        學生姓名:<form:input path="name"/>
        學生年齡:<form:input path="age"/>
        學生城市:<form:input path="address.city"/> <%--支持級聯--%>
    </form:form>
</body>
</html>

注:path屬性支持級聯!!

最終渲染在頁面上

<form id="student" action="/tags/get" method="post">
    學生ID:<input id="id" name="id" type="text" value="1">
    學生姓名:<input id="name" name="name" type="text" value="wzj">
    學生年齡:<input id="age" name="age" type="text" value="22">
    學生城市:<input id="address.city" name="address.city" type="text" value="深圳"> 
</form>

form標籤的id,就是request域對象中的key值!

form:input標籤:變成了類型!

1、JSP 頁面導入 Spring MVC 表單標籤庫,與導入 JSTL 標籤庫的語法非常相似,前綴 prefix 可以自定義,通常定義爲 from。

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

2、將 form 表單與模型數據進行綁定,通過 modelAttribute 屬性完成綁定,將 modelAttribute 的值設置爲模型數據對應的 key 值。

Handeler:modelAndView.addObject("student",student);
JSP:<form:form modelAttribute="student">

3、form 表單完成綁定之後,將模型數據的值取出綁定到不同的標籤中,通過設置標籤的 path 屬性完成,將 path 屬性的值設置爲模型數據對應的屬性名即可。

學生ID:<form:input path="id"/><br/>
學生姓名:<form:input path="name"/><br/>
學生年齡:<form:input path="age"/><br/>

1.2:form:password標籤

<form:form modelAttribute="student">
    學生密碼:<form:password path="password"/><br/>
</form:form>

注意:它這個密碼不會顯示任何內容,連黑點都沒有,我感覺不是很好!

渲染在html中

學生密碼:<input id="password" name="password" type="password" value="">

1.3:form:checkbox標籤

通過 path 與模型數據的屬性值進行綁定,可以綁定 boolean、數組和集合。

如果綁定 boolean 值,若該變量的值爲 true,則表示該複選框選中,否則表示不選中。

如果綁定數組或者集合,數組/集合中的元素等於 checkbox 的 value 值,則選中。

  • 綁定boolean值
多選框:<form:checkbox path="flag"/><br/>

渲染在html中

多選框:<input id="flag1" name="flag" type="checkbox" value="true" checked="checked">
  • 綁定數組/集合

1、Handler

 @GetMapping("/get")
public String get(Model model){
    Student student = new Student();
    student.setHobby(new String[]{"打籃球","編程","跑步","唱歌"});
    model.addAttribute("student",student);
    return "tag";
}

2、頁面

<form:form modelAttribute="student">
    愛好:
    <form:checkbox path="hobby" value="打籃球"></form:checkbox>打籃球<br/>
    <form:checkbox path="hobby" value="編程"/>編程<br/>
    <form:checkbox path="hobby" value="旅遊"/>旅遊<br/>
    <form:checkbox path="hobby" value="逛街"/>逛街<br/>
</form:form>

最終頁面上的打籃球,編程,被選中!

1.4:form:checkboxes標籤

渲染的是 HTML 中的一組 <input type="checkbox"/>,是對 <form:checkbox/> 的一種簡化,需要結合 items 和 path 屬性來使用,items 綁定被遍歷的集合或數組,path 綁定被選中的集合或數組,可以這樣理解,items 爲全部可選集合,path 爲默認的選中集合。

<form:form modelAttribute="student">
    愛好:
    <form:checkboxes path="selectedHobby" items="${student.hobby}"/>
</form:form>

同樣最終頁面上的打籃球,編程,被選中!

注意:items 則需要通過 EL 表達式的形式從域對象中獲取數據,不能直接寫屬性名。

1.5:form:radiobutton 和 form:radiobuttons標籤

和form:check 和 form:checkboxes基本上一致!

渲染的是 HTML 中的一組 <input type="radio"/>,這裏需要結合 items 和 path 兩個屬性來使用,items 綁定被遍歷的集合或數組,path 綁定被選中的值,items 爲全部的可選類型,path 爲默認選中的選項

  • form:radiobutton

1、handler

student.setRadioId("1");

2、頁面

單選框:<form:radiobutton path="radioId" value="0"/>

綁定的數據與標籤的 value 值相等則爲選中,否則不選中。

  • form:radiobuttons

1、handler

student.setRadioGroup(Arrays.asList("男","女"));
student.setSelectedRadio(Arrays.asList("男"));

2、頁面

單選框組:<form:radiobuttons path="selectedRadio" items="${student.radioGroup}"/>

path:對應modelAttribute域中的對象的屬性即可 !

1.6:form:select標籤

渲染的是 HTML 中的一個 <select/> 標籤,需要結合 items 和 path 兩個屬性來使用,items 綁定被遍歷的集合或數組,path 綁定被選中的值,用法與 <from:radiobuttons/>一致。

HashMap cityMap = new HashMap();
cityMap.put(1,"深圳");
cityMap.put(2,"上海");
student.setCityMap(cityMap);
student.setSelectCity(1);
所在城市:<form:select path="selectCity" items="${student.cityMap}"></form:select>

在html中渲染

<select id="selectCity" name="selectCity">
    <option value="1" selected="selected">深圳</option>
    <option value="2">上海</option>
</select>

將map的key,變成了頁面上的value, vlaue變成了要顯示的文字!

1.6.1:form:options標籤
下拉框:
<form:select path="selectCity">
    <form:options items="${student.cityMap}"/>
</form:select>

效果和上面是一樣的,但是path和items的位置不一樣了!

1.6.2:form:option標籤

form:select結合form:option的使用,from:select定義 path 屬性,給每一個form:option` 設置 value 值,path 的值與哪個 value 值相等,該項默認選中。

所在城市:<form:select path="selectCity">
    <form:option value="1">杭州</form:option>
    <form:option value="2">成都</form:option>
    <form:option value="3">西安</form:option>
</form:select><br/>

1.7:form:textarea標籤

渲染的是 HTML 中的一個 <textarea/> ,path 綁定模型數據的屬性值,作爲文本輸入域的默認值。

student.setIntroduce("你好,我是...");
modelAndView.addObject("student",student);
信息:<form:textarea path="introduce"/><br/>

1.8:form:errors標籤

處理錯誤信息,一般用在數據校驗,該標籤需要結合 Spring MVC 的驗證器結合起來使用。

注:用到的實體類和Handler

1、實體類

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private boolean flag;
    private String password;
    private Address address;
//    private String[] hobby;
    private List<String> hobby;
    private List<String> selectedHobby;
    private String radioId;
    private List<String> radioGroup;
    private List<String> selectedRadio;
    private Map<Integer,String> cityMap;
    private Integer selectCity;
    public Student(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}


@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address {
    private String city;
}

2、Handler

@GetMapping("/get")
    public String get(Model model){
        Student student = new Student();
        student.setId(1);
        student.setName("wzj");
        student.setAge(22);
        student.setPassword("12345");
        student.setFlag(true);
        student.setAddress(new Address("深圳"));
//      student.setHobby(new String[]{"打籃球","編程","跑步","唱歌"});
        student.setHobby(Arrays.asList("打籃球","編程","跑步","唱歌"));
        student.setSelectedHobby(Arrays.asList("打籃球","編程"));
        student.setRadioId("1");
        student.setRadioGroup(Arrays.asList("男","女"));
        student.setSelectedRadio(Arrays.asList("男"));
        HashMap cityMap = new HashMap();
        cityMap.put(1,"深圳");
        cityMap.put(2,"上海");
        student.setCityMap(cityMap);
        student.setSelectCity(1);
        model.addAttribute("student",student);
        return "tag";
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章