SpringMVC:前台jsp页面和后台传值

本文介绍了SpringMVC中前台JSP页面与后台交互的几种方式,包括如何通过表单传递数据,使用JSTL与SpringMVC标签库进行取值。特别强调了SpringMVC自带标签的使用,如`<sf:form>`和`<sf:error>`,以及`@Validated`注解在服务端验证中的应用。同时,指出了在不同情况下,Model参数与`modelAttribute`的正确配置,以及避免报错的关键点。
摘要由CSDN通过智能技术生成

前台jsp页面和后台传值的几种方式:

                       不用SpringMVC自带的标签

前台---->后台,通过表单传递数据():

1.jsp页面代码如下,  modelattribute 有没有都行

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="sf"  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>
    
    <form method="post" enctype="multipart/form-data">
        Username:<input type="text" name="username"/> <sf:errors path="username">
        Password:<input type="password" name="password"/> <sf:errors path="password">
        Nickname:<input type="text" name="nickname"/></br>
        Email<input type="text" name="email"/>
            
    </form>
</body>
</html>

2.写Action,如下两种方式都可以:

  第一种,表单的name属性值必须和接受的参数同名。否则,接收到的参数为null,但不报错

  第二种,表单的name属性值必须和接收对象的属性同名。否则,接收到的参数为null,但不报错

@RequestMapping(value="/add",method=RequestMethod.POST)
    public String userAdd(String username,String password,String nickname,String email){
        User user = new User(username,password,nickname,email);
        System.out.println(user.toString());    
        users.put(user.getNickname(), user);
        //客户端跳转
        return "redirect:/user/users";
    }

@RequestMapping(value="/add",method=RequestMethod.POST)
    public String userAdd(User user) {
        System.out.println(user.toString());    
        users.put(user.getNickname(), user);
        //客户端跳转
        return "redirect:/user/users";
    }

 注意1:即使我们的Action使用第二种方式(选用User类对象作为参数),前台界面也不能写成user.username ,后台这样会接收失败,得到的值是null。这一点如果没记错的话,应该和Struts2是不一样的

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="sf"  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>
    
    <form method="post" enctype="multipart/form-data">
        Username:<input type="text" name="user.username"/> 
        Password:<input type="password" name="user.password"/> 
        Nickname:<input type="text" name="user.nickname"/>
        Email<input type="text" name="user.email"/>
        <input type="submit" value="添加用户" />
        
    </form>
</body>
</html>


注意2:我们的Action使用第二种方式(选用User类对象作为参数),我们可以在服务端使用@Validated注解来进行服务端验证。但是由于我们前台jsp页面没有使用SpringMVC自带的标签库,前台jsp页面无法显示错误信息,也就是<sf:errors path="username"></sf:errors> 不起作用(不报错)。

  ----如果只把<form></form>标签缓存<sf:form></sf:form>,并且添加modelAttribute="user"属性,不该其他内容,<sf:error>会起作用。但是我们不会这样做,没有任何意义,要用就统一用SpringMVC自带的标签库,要么就全部用,混着用容易出错。

后台---->前台  model.addAttribute("users",users)

后台Action代码

 

@RequestMapping(value={"/users","/",""},method=RequestMethod.GET)
     public String userList(Model model){
         //model.addAllAttributes(user);//key是map(类型名首字母小写)
        model.addAttribute("users",users);
        return "user/list";
     }
    @RequestMapping(value="/add",method=RequestMethod.GET)
    public String userAdd(){
        model.addAttribute("user", new User("newUser","newUserPwd","newUserNickname","newUser@126.com"));
        return "user/add";
    }



 

前台jap页面取值:使用jstl:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

复制代码
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值