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";
}
Springmvc controller和jsp页面传值对象类型问题和普通问题的更多相关文章
- struts2:JSON在struts中的应用(JSP页面中将对象转换为JSON字符串提交、JSP页面中获取后台Response返回的JSON对象)
JSON主要创建如下两种数据对象: 由JSON格式字符串创建,转换成JavaScript的Object对象: 由JSON格式字符串创建,转换成JavaScript的List或数组链表对象. 更多关于J ...
- 向jsp页面传值时出现乱码
在一个html页面中用表单向jsp页面传值: 这是html页面 <html> <head> <title>MyBeans.html</title> &l ...
- SpringMVC:前台jsp页面和后台传值
前台jsp页面和后台传值的几种方式: 不用SpringMVC自带的标签 前台---->后台,通过表单传递数据(): 1.jsp页面代码如下, modelattribute 有没有都行 < ...
- 【JavaWEB SSH】jsp页面传值后台Controller 部分值绑定不上实体类
//前端ajax代码 1 var oldpassword = $('#old_password').val(); var password = $('#L_pass').val(); var user ...
- JSP 页面传值方法总结(转)
原文地址:http://www.cnblogs.com/java-class/p/6358964.html 阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 ...
- JSP 页面传值方法总结
JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总结下来,需要时可以进行权衡利弊选择最合适的方式. 1. URL 链接后追加参数 <a href=&quo ...
- JSP 页面传值
使用session会话传值并重定向页面 //得到用户提交的值 String name = request.getParameter("username"); String pwd ...
- 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】
阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 Session JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总 ...
- JSP页面传值出现中文乱码的问题
在接收值的jsp页面代码的body里添加: <%request.setCharacterEncoding("utf-8"); %> //这里是设置utf-8为jsp页 ...
随机推荐
- jquery控制radio选中
好久没写jquery了,昨天下午写一个效果,结果倒腾了半天还是没有解决,好在今天早上在网上询问到解决方法了,现在果断记录下. 要实现的效果就是交易方式选择时不同的交易方式下默认选中第一个选项. 如下: ...
- bzoj3212 pku3468 A Simple Problem with Integers
一个有初值的数列.区间加.区间查 用线段树直接水过 然而并没有1A,主要是做题太快没看规模结果没注意线段树要用longlong建 卧槽怎么可以这么坑爹,害得我看见wa心慌了,还以为连线段树都要跪 一开 ...
- 使用Git进行项目管理
首先在https://git.oschina.net进行注册以及登陆 登陆进去之后,如果想要创建项目,可以在 点击加号按钮,进行项目创建 3.这里以创建私有项目为例: 输入完成后,点击“创建”,进入下 ...
- Collection
集合(collection): 使用存储实例的变长的容 容器名 存储的元素类型 长度 数组 基本和引用 定长 集合 引用 ...
- 快速理解几种常用的RAID磁盘阵列级别
我发现周围不少人在学习和理解RAID磁盘阵列的原理时,找了很多专业的资料来看,但是因为动手的机会比较少,因此看完以后还是似懂非懂,真正遇到实际的方案设计的时候,还是拿不定主意. 因此,我结合自己在过去 ...
- Ubuntu16.04安装docker
1.检查内核版本uname -r,如果是16.04则可以跳过这一步,因为docker只能运行在64-bit linux 内核3.10或高于3.10的系统中. 2.更新apt sources sudo ...
- django--models操作
1.models的功能 操作数据库 提交验证 在django的admin中,使用的是modelForms所以在验证的时候,尽管在models后有error_ message参数也不会根据此来提示.具体 ...
- 视觉机器学习读书笔记--------BP学习
反向传播算法(Back-Propagtion Algorithm)即BP学习属于监督式学习算法,是非常重要的一种人工神经网络学习方法,常被用来训练前馈型多层感知器神经网络. 一.BP学习原理 1.前馈 ...
- linux下文件搜索命令学习笔记
1. locate:按照文件名搜索文件 locate filename 与find在整个操作系统中遍历搜索不同,locate命令在/var/lib/mlocate这个后台数据库中按照文件名搜索,所以优 ...
- VS中使用svn注意事项
1.程序需定期编译通过后上传SVN,每天可上传多次,根据个人程序开发进度决定,但每天晚下班前必须将当天的程序编译调试通过并上传SVN.每天早上上班首先需要更新SVN最新版本. 上传的工作流程应该是,更 ...