欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb-20-SpringMVC的表单标签以及引入静态资源

程序员文章站 2022-07-10 18:03:33
...

目录

1:页面操作

2:用了表单标签的页面可能会报这个错误;请求域中没有一个command类型的对象;来到页面之前一定要给请求域中放这个对象;

​ 3:后端操作

4:springmvc引入静态资源

1:当在页面使用静态资源时回报异常

2:原因是因为springmvc在web.xml中设置了拦截除jsp外所有的请求

3:解决办法:配置

4:关于作用


通过 SpringMVC的表单标签可以实现将模型数据中的属性和 HTML 表单元素相绑定,以实现表单数据更便捷编辑和表单值的回显

1:页面操作

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
//必须指定导入form
<%@ taglib prefix="form" 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>Insert title here</title>
</head>
<body>
 
<!-- 
1.为什么使用SpringMVC的form标签
① 快速开发
② 表单回显
2.可以通过modelAttribute指定绑定的模型属性,
若没有指定该属性,则默认从request域中查找command的表单的bean
如果该属性也不存在,那么,则会发生错误。
3:	path:表单字段,对应 html 元素的 name 属性,支持级联属性
	htmlEscape:是否对表单值的 HTML 特殊字符进行转换,默认值为 true
	cssClass:表单组件对应的 CSS 样式类名
	cssErrorClass:表单组件的数据存在错误时,采取的 CSS 样式
4: form:radiobuttons:单选框组标签,用于构造多个单选框
	items:可以是一个 List、String[] 或 Map
	itemValue:指定 radio 的 value 值。可以是集合中 bean 的一个属性值
	itemLabel:指定 radio 的 label 值
	delimiter:多个单选框可以通过 delimiter 指定分隔符


 -->
 <form:form action="empAdd" method="POST" modelAttribute="employee">
         LastName : <form:input path="lastName"/><br><br>
         Email : <form:input path="email"/><br><br>
         <%
                 Map<String,String> map = new HashMap<String,String>();
                 map.put("1", "Male");
                 map.put("0","Female");
                 request.setAttribute("genders", map);
         %>
        Gender : <br><form:radiobuttons path="gender" items="${genders }" delimiter="<br>"/><br><br>
         DeptName : 
                 <form:select path="department.id" 
                                                 items="${deptList }" 
                                                 itemLabel="departmentName" 
                                                 itemValue="id"></form:select><br><br>
                 <input type="submit" value="Submit"><br><br>
 </form:form> 
</body>
</html>

2:用了表单标签的页面可能会报这个错误;请求域中没有一个command类型的对象;来到页面之前一定要给请求域中放这个对象;

JavaWeb-20-SpringMVC的表单标签以及引入静态资源 3:后端操作

@RequestMapping(value="/empInput",method=RequestMethod.GET)
public String empInput(Map<String,Object> map){
    map.put("deptList", departmentDao.getDepartments());
    //解决错误:java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute
    Employee employee = new Employee();
    //map.put("command", employee);
    //	可以通过 modelAttribute 属性指定绑定的模型属性,若没有指定该属性,则默认从 request 域对象中读取 command 的表单 bean,如果该属性值也不存在,则会发生错误。
    map.put("employee", employee);
    return "add";
}

4:springmvc引入静态资源

1:当在页面使用静态资源时回报异常

JavaWeb-20-SpringMVC的表单标签以及引入静态资源

2:原因是因为springmvc在web.xml中设置了拦截除jsp外所有的请求

3:解决办法:配置<mvc:default-servlet-handler/>

  • 在dispatcher-servlet.xml中配置<mvc:default-servlet-handler/>告诉springmvc自己能映射的自己管理;不能映射的交给tomcat
  • 但是当设置了<mvc:default-servlet-handler/>后其他的动态请求又不好使了,那么在此设置开启springmvc管理动态资源<mvc:annotation-driven />

4:关于<mvc:default-servlet-handler/>作用

<mvc:default-servlet-handler/> 将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler

它会对进入 DispatcherServlet 的请求进行筛查,如果发现是没有经过映射的请求,

就将该请求交由 WEB 应用服务器默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet 继续处理

一般 WEB 应用服务器默认的 Servlet 的名称都是 default。

若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显式指定 

参考:CATALINA_HOME/config/web.xml

    <servlet>

        <servlet-name>default</servlet-name>

        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

        <init-param>

            <param-name>debug</param-name>

            <param-value>0</param-value>

        </init-param>

        <init-param>

            <param-name>listings</param-name>

            <param-value>false</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

该标签属性default-servlet-name默认值是"default",可以省略。        

<mvc:default-servlet-handler/>        

 -->

<mvc:default-servlet-handler default-servlet-name="default"/>