SpringMVC前后台传值写法

注意:

此文档仅限于cc的个人项目,因为某些配置文件不同,比如springMVC配置文件配置了返回的jsp前后缀pages 和.jsp,返回到页面的话前后缀可省略,再必须配置了返回对象的话会把其转变为json的格式,所以看的时候要自动带入。。。

1.前台向后台传值:

1.1传参数

只要name的值和controller的方法中参数一致即可

(1)jsp:

<h2>提交对象给后台</h2>
  <form id="fm" method="post" action="${ctx}/user/login2.do">
<div>
    <div>用户名:</div>
    <input type="text" name="userName" value=""/>
    <div>密码:</div>
    <input type="password" name="password" value=""/>
    <div>手机号:</div>
    <input type="text" name="mobilePhone" value=""/>
</div>
<div>
    <!-- <button id="login" onclick="login();">登录</button>  -->
<input type="submit" value="登录"/>
</div>
</form>

(2)后台controller:

@RequestMapping("/login2")
public String login2(String userName,String password,String mobilePhone){
    User user  = new User();
    user.setUserName(userName);
    user.setPassword(password);
    user.setMobilePhone(mobilePhone);
    User login = userService.findUserForLogin(user);
    if(login != null){
        return "user/users";
    }
    return "redirect:/index.jsp";
}

访问:index.jsp:
http://localhost:8080/sm/(本人代码点击不起作用)
输入参数点击登录,后台可获取到值

1.2传对象

只要name的值与Bean实体类的属性名称一致即可,springMVC会自动识别成对象传入

(1)实体类:

public class User implements Serializable{

private static final long serialVersionUID = 1L;
//用户编号
private Integer id;
//用户名
private String userName;
//密码
private String password;
//手机号
private String mobilePhone;
//地址
private String address;
//身份/角色:1:游客(默认) 2:读者  3:作者  0:管理员
private Integer role;
//备注
private String note;
public User(){}
//省略setter and getter …
}

(2)jsp:

<h2>提交对象给后台</h2>
  <form id="fm" method="post" action="${ctx}/user/login.do">
<div>
    <div>用户名:</div>
    <input type="text" name="userName" value=""/>
    <div>密码:</div>
    <input type="password" name="password" value=""/>
    <div>手机号:</div>
    <input type="text" name="mobilePhone" value=""/>
</div>
<div>
    <!-- <button id="login" onclick="login();">登录</button>  -->
<input type="submit" value="登录"/>
</div>
</form>

如果对象内还有对象打点即可

(3)后台controller:

@RequestMapping("/login")
public String login(User user){
        User login = userService.findUserForLogin(user);
        if(login != null){
            return "user/users";
        }
        return "redirect:/index.jsp";
    }
}

页面跳转至pages/user/users.jsp页面:

(4)users.jsp:

 <h1>所有用户如下</h1>
 <table>
    <thead>
        <tr>
            <td>用户编号</td>
            <td>用户名</td>
            <td>密码</td>
            <td>手机号</td>
            <td>联系地址</td>
            <td>系统角色</td>
            <td>备注</td>
        </tr>

    </thead>
    <tbody>
        <tr>
        <c:forEach items="${users}" var="user">
            <td>${user.id}</td>
            <td>${user.userName}</td>
            <td>${user.password}</td>
            <td>${user.mobilePhone}</td>
            <td>${user.address}</td>
            <td>${user.role}</td>
            <td>${user.note}</td>
        </c:forEach>
        </tr>
    </tbody>
    <tfoot>
    </tfoot>
</table>

显示如下:
用户编号 用户名 密码 手机号 联系地址 系统角色 备注
1 cc 123456 18811111111 北京 1 我天,我们有了第一个用户

1.3传集合

(1)jsp:

<h2>提交集合给后台</h2>
<form id="fm2" method="post" action="${ctx}/user/handleUserList.do">
<div>
    <div>用户名:</div>
    <input type="text" name="users[0].userName" value=""/>
    <div>密码:</div>
    <input type="password" name="users[0].password" value=""/>
    <div>手机号:</div>
    <input type="text" name="users[0].mobilePhone" value=""/>
</div>
<div>
    <!-- <button id="login" onclick="login();">登录</button>  -->
<input type="submit" value="登录"/>
</div>
</form>

(2)自定义使用的集合类:

//传递前后台参数使用
public class UserListVO {
    private List<User> users;

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }
}

(3)后台controller:

@RequestMapping("/handleUserList")
@ResponseBody
public List<User> handleUserList(UserListVO userListVOs) {
    return userListVOs.getUsers();
}

点击登录显示:
[{“id”:null,”userName”:”cc”,”password”:”123456”,”mobilePhone”:”18810424140”,”address”:null,”role”:null,”note”:null}]

我会告诉你们set,map都需要这么做么,哈哈哈哈哈

1.4当然你还有万能的

//Controller:
@RequestMapping(“handleRequest”)
Public void handleRequest(HttpServletRequest request){
    //不多写大家都会使
}

2.后台向前台传值:

2.1返回对象

我这里说的对象是Model和集合

2.1.1返回json字符串

我这里是返回对象直接转化为json在.do的请求中,配置文件中配置即可,注意配置后ie浏览器会默认.json是一个文件,提示下载,想直接显示浏览器中,要把它拦截下来转化为text显示,springMVC配置文件如下:

<bean id="mappingJacksonHttpMessageConverter2" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>

<mvc:default-servlet-handler />
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="mappingJacksonHttpMessageConverter2" /><!-- json转换器 -->
        </list>
    </property>
</bean>

当Controller中方法中返回对象且方法上注解@ResponseBody时,会在当前.do访问路径下显示一个json字符串,之前的例子有显示,这里不写了。

2.1.2返回ModelAndView对象

此对象是一个视图解析器,既包含view也包含对象数据object
Controller:

@RequestMapping("/queryAll2")//@RequestMapping请求与执行对应上
    public ModelAndView queryAll2(){
        List<User> users =  userService.findAll();
        /*
         * 1.ModelAndView:即包含视图信息,也包含模型数据信息,这样spring mvc就可以使用视图对模型数据进行渲染了。
         * 可以简单的将模型数据看做一个Map<String,Object>对象
         * 如下方法添加模型数据:
         * ModelAndView addObject(String attributeName,Object attributeValue);
         * ModelAndView addAllObjects(Map<String,?> modelMap);
         * 如下方法设置视图:
         * void setView(View view);指定一个具体的视图对象
         * void setViewName(String viewName):指定一个逻辑视图名
         */
        ModelAndView mav = new ModelAndView();
        mav.setViewName("user/users");
        mav.addObject("users", users);
        return mav;
    }
访问此路径:http://localhost:8080/sm/user/queryAll2.do(本人项目点击无反应)
页面会跳转至users.jsp,且有数据显示。

2.2返回页面

直接返回页面不带参数可直接返回String类型的路径:

return "user/users";

我这里在springMVC配置中配置了页面资源前后缀pages和.jsp可省略。
如果希望返回String类型去页面但是带上一些数据:

2.2.1@ModelAttribute

此注解在请求参数中,它把请求参数也作为返回对象返回
,也就是说虽然返回的是一个jsp的字符串类型,可是此jsp中还带着此参数,可用el表达式获取。
因为@ModelAttribute会把参数保存到request中,springMVC默认返回的路径是一个请求转发。
重定向可以这么写:

return "redirect:/index.jsp";

此时需要前后缀,我也不知为毛,可能是配置文件中默认也是请求转发才会带上
示例:同前台向后台传值部分的传对象,发现虽然返回的是一个jsp:”user/users”,但是
${user.userName}也可以获取到

2.2.2ModelMap

此对象在springMVC中称为隐式对象,存在这里也相当于存在了request中,可以在页面直接获取,一般放在参数位置,springMVC一旦发现有Map或Model类型的入参,就会将请求内在的隐含模型对象传递给这些参数,因此在方法体重可以通过这个入参对模型中的数据进行读写操作。

(1)Controller:
//可以预先定义ModelMap中固定有什么,一旦参数里有ModelMap,这个对象就会放进去
//例,此时modelMap中有键值对”cc”=”cc”
@ModelAttribute("cc")
    public String getCc() {
        return “cc”;
    }

@RequestMapping("/handleModelMap")
    public String handleModelMap(ModelMap modelMap) {
        //放入新的对象
        modelMap.addAttribute("dd", "I'm dd");
        //springMVC将请求对应的隐含模型对象传递给modelMap,因此可以在方法中
        //它访问模型中的数据   @ModelAttribute("cc")getCc处定义了
        String cc = (String) modelMap.get("cc");
//如果放一个List
        List<User> users = userService.findAll();
        modelMap.addAttribute("users", users);
        return "user/users";
    }
(2)jsp:

在users.jsp中el表达式可以访问到:

<div>
        <h2>ModelMap test</h2>
        <input type="text" value="${cc }"/>
        <input type="text" value="${dd}"/>
        <input type="text" value="${users[0].userName }"/>
</div>

显示如下:
ModelMap test

cc I’m dd cc

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值