Springmvc controller和jsp页面传值对象类型问题和普通问题

一:JSP-->controller

1.当jsp页面传递的值是对象类型时候比如User.name User.age的user对象传递,需要以下操作

jsp页面提供对应标签的value必须存在且合法,name属性只能是对象的具体属性名,不需要写成对象.属性名的形式,例如:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
    $(function() {
        $("#prev").click(
                function() {
                    $("#form0").attr("action",
                            "${pageContext.request.contextPath}/user/prev.do");
                    var currentPage = $("#currentPage").val() - 1;
                    $("#currentPage").val(currentPage);
                    alert($("#currentPage").val());
                    $("#form0").submit();
                })

        $("#next").click(
                function() {
                    $("#form0").attr("action",
                            "${pageContext.request.contextPath}/user/next.do");
                    $("#form0").submit();
                })
    })
</script>
</head>
<body>
    <form id="form0" method="POST">
        <table border="1">
            <thead>
                <tr>
                    <td width="60px">id</td>
                    <td width="120px">name</td>
                    <td width="60px">age</td>
                </tr>
            </thead>
            <tbody>
                <c:forEach var="user" items="${userList}" varStatus="status">
                    <tr>
                        <td>${user.id}</td>
                        <td>${user.userName}</td>
                        <td>${user.age}</td>
                    </tr>
                </c:forEach>
                <tr>
                    <td><c:if test="${pageTableForm.currentPage > 1}">
                            <input id="prev" type="button" value="上一页">
                        </c:if></td>
                    <td>当前<label>${pageTableForm.currentPage}</label>页/共<label>${pageTableForm.pageCount}</label></td>
                    <td><c:if test="${pageTableForm.currentPage < pageTableForm.pageCount}">
                            <input id="next" type="button" value="下一页">
                        </c:if></td>
                </tr>
                
            </tbody>
        </table>
        <input id="currentPage" type="text" name="currentPage" value="${pageTableForm.currentPage}">
    </form>
</body>
</html>

 

这里的

<input id="currentPage" type="text" name="currentPage" value="${pageTableForm.currentPage}">

我自己定义的一个封装属性的javabean对象PageTableForm,用来存放表单内容,个人习惯别较真儿

package com.mi.form;

public class PageTableForm {

    private int currentPage;// 当前页
    private int pageSize = 3;// 每页记录数
    private int beginIndex;// 开始位置
    private int endIndex;// 结束位置
    private int pageCount;// 共多少页
    private int userCount;// 共多少条记录
    ...
省略get set
}

此时的value="${pageTableForm.currentPage}"的值为一个int类型且存在的数字,提交表单后到对应的requestmapping的方法中,代码如下

package com.mi.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.mi.entity.User;
import com.mi.form.PageTableForm;
import com.mi.service.impl.UserInfoServiceImpl;

@Controller
@RequestMapping("/user")
public class UserInfoCotroller {

    @Autowired
    private UserInfoServiceImpl userInfoServiceImpl;

    private PageTableForm pageTableForm;

    @RequestMapping("/init")
    public String init(){
        pageTableForm = new PageTableForm();
        return "redirect:/user/query.do";
    }
    
    @RequestMapping("/query")
    public String queryUserInfo(Model model,HttpServletRequest request) {
        pageTableForm = getOperation();
        List<User> userList = userInfoServiceImpl.queryUserInfo(pageTableForm.getBeginIndex(), pageTableForm.getEndIndex());
        model.addAttribute("userList", userList);
        model.addAttribute("pageTableForm", pageTableForm);
        return "userInfo";
    }

    public PageTableForm getOperation() {
        if (pageTableForm.getCurrentPage() == 0)
            pageTableForm.setCurrentPage(1);

        pageTableForm.setUserCount(getCount());
        if (pageTableForm.getUserCount() % 3 == 0) {
            pageTableForm.setPageCount(pageTableForm.getUserCount() / pageTableForm.getPageSize());
        } else {
            pageTableForm.setPageCount(pageTableForm.getUserCount() / pageTableForm.getPageSize() + 1);
        }
        
        pageTableForm.setBeginIndex(pageTableForm.getCurrentPage() * 3 - 3);
        pageTableForm.setEndIndex(pageTableForm.getCurrentPage() * 3);

        return pageTableForm;
    }

    @RequestMapping("/prev")
    public String pagePrev(Model model,HttpServletRequest request,PageTableForm pageTableForm) {
        System.out.println(request.getParameter("currentPage"));
        System.out.println(pageTableForm.getCurrentPage());
        int currentPage = pageTableForm.getCurrentPage()-1;
        pageTableForm.setCurrentPage(currentPage);
        return "redirect:/user/query.do"; }
    
    @RequestMapping("/next")
    public String pageNext(Model model) {
        int currentPage = pageTableForm.getCurrentPage()+1;
        pageTableForm.setCurrentPage(currentPage);
        return "redirect:/user/query.do";
    }
    
    public int getCount() {
        return userInfoServiceImpl.getCount();
    }

    public UserInfoServiceImpl getUserInfoServiceImpl() {
        return userInfoServiceImpl;
    }

    public void setUserInfoServiceImpl(UserInfoServiceImpl userInfoServiceImpl) {
        this.userInfoServiceImpl = userInfoServiceImpl;
    }

    public PageTableForm getPageTableForm() {
        return pageTableForm;
    }

    public void setPageTableForm(PageTableForm pageTableForm) {
        this.pageTableForm = pageTableForm;
    }

}

红色部分就是提交的方法,可以看出在方法参数中要声明一下对象,这里我为了是实验比较数据传到后台是否正确,所以使用了2中方法--request.getParamter()和直接使用对象.get...方法,得出结果如下所示,

我点击上一页,页面alert一个跳转页面的页码,现在是从第二页翻到第一页,所以是1,这样我们后台2次正确的情况应该也都是1(日语操作系统,别在意这些,不是乱码)

多点了一次,别在意这些,重点是后台获取的数据就是前台我们想要的

 2.当jsp->后台是普通数据的时候,实际项目中这种情况不多,但是还是总结一下

暂时挂起,关于这些我想等到实际用到时再列,上1中已经列了一种方法,另外就是利用注解去值

页面如下

<form action="login2" method="post">
          用户:<input type="text" name="name"><br><br>
          密码:<input type="text" name="password"><br><br>
        <input type="submit" value="确定">
</form>

普通数据(非对象)的数据有2种方法传递到后台,request获取+注解版的request

1):request获取

/**
     * 使用HttpServletRequest获取
     */
    @RequestMapping("/login1")
    public String login1(HttpServletRequest request,Model model){
        model.addAttribute("name", request.getParameter("name"));
        model.addAttribute("password", request.getParameter("password"));
        return "success";
    }

 

2):注解版的request

/**
     * spring自动将表单参数注入到方法参数,参数值和页面name属性一致时可以省去@RequestParam注解
     */
    @RequestMapping("/login2")
    public String login2(@RequestParam("name") String name, String password,Model model){
        model.addAttribute("name", name);
        model.addAttribute("password", password);
        return "success";
    }

 

实体类User不再列出了

二:controller-->JSP

有2中办法(实际更多,不过存在重复嫌疑列举常用的就好),用model+用map

1):利用model对象添加数据到属性中,页面可以使用EL表达式获取

 

@RequestMapping("/init")
    public String init(){
        pageTableForm = new PageTableForm();
        return "redirect:/user/query.do";
    }
    
    @RequestMapping("/query")
    public String queryUserInfo(Model model,HttpServletRequest request) {
        pageTableForm = getOperation();
        List<User> userList = userInfoServiceImpl.queryUserInfo(pageTableForm.getBeginIndex(), pageTableForm.getEndIndex());
        model.addAttribute("userList", userList);
        model.addAttribute("pageTableForm", pageTableForm);
        return "userInfo";
    }

 

JSP:

<form id="form0" method="POST">
        <table border="1">
            <thead>
                <tr>
                    <td width="60px">id</td>
                    <td width="120px">name</td>
                    <td width="60px">age</td>
                </tr>
            </thead>
            <tbody>
                <c:forEach var="user" items="${userList}" varStatus="status">
                    <tr>
                        <td>${user.id}</td>
                        <td>${user.userName}</td>
                        <td>${user.age}</td>
                    </tr>
                </c:forEach>
                <tr>
                    <td><c:if test="${pageTableForm.currentPage > 1}">
                            <input id="prev" type="button" value="上一页">
                        </c:if></td>
                    <td>当前<label>${pageTableForm.currentPage}</label>页/共<label>${pageTableForm.pageCount}</label></td>
                    <td><c:if test="${pageTableForm.currentPage < pageTableForm.pageCount}">
                            <input id="next" type="button" value="下一页">
                        </c:if></td>
                </tr>
                
            </tbody>
        </table>
        <input id="currentPage" type="text" name="currentPage" value="${pageTableForm.currentPage}">
    </form>

2):使用map方式设值,JSP同上不再列出

@RequestMapping("/login4")
    public String login4(User user, Map<String, Object> map){
        map.put("name", user.getName());
        map.put("password", user.getPassword());
        return "success";
    }

转载于:https://my.oschina.net/u/2365905/blog/824662

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值