注意:
此文档仅限于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