@Controller
@RequestMapping("/user")
public class userController {
private Map<String,User> users = new HashMap<String,User>();
public userController(){
users.put("1", new User("张三","小张","1122","4561@ee.com"));
users.put("2", new User("李四","小李","1133","2323@ee.com"));
users.put("3", new User("王五","小王","1144","1011@ee.com"));
users.put("4", new User("赵六","小赵","1155","5577@ee.com"));
System.out.println(users.get("1")+""+users.values());
}
//列表
@RequestMapping(value="/users" ,method=RequestMethod.GET)
public String list(Model model){
model.addAttribute("users",users);
return "user/list";
}
//查看
@RequestMapping(value="/{username}",method=RequestMethod.GET)
public String show(@PathVariable("username") String username,Model model){
model.addAttribute("user",users.get(username));
return "user/show";
}
列表页面:list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>
<a href="add">添加</a>
<br/>
<c:forEach items="${users }" var="um">
<a href="${um.value.username }"> ${um.value.username }</a>
${um.value.nickname }
${um.value.password }
${um.value.email }<a href="${um.value.username }/update">修改</a><br>
</c:forEach>
</body>
</html>
查看页面show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" 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>
username:${user.username}<br/>
nickname:${user.nickname}<br/>
password:${user.password}<br/>
email:${user.email}
</body>
</html>
访问/user/users可以看到这些数据
查看的时候看不到数据 查看是通过超链接将参赛带到controller
不明白为什么取不到数据 model提示为null
发现username为中文时取不到数据 username为英文 却可以取数据
异常如下
十二月 06, 2016 9:45:21 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [hello] in context with path [/springmvc] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Model object must not be null] with root cause
java.lang.IllegalArgumentException: Model object must not be null
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.ui.ModelMap.addAttribute(ModelMap.java:91)
at org.springframework.ui.ExtendedModelMap.addAttribute(ExtendedModelMap.java:40)
at org.springframework.ui.ExtendedModelMap.addAttribute(ExtendedModelMap.java:29)
at com.tedu.controller.userController.update(userController.java:73)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2517)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2506)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
查看页面为什么取不到数据 ?为什么提示model 为null?
spring 4.0.4.RELEASE
System.out.println(users.get("1")+""+users.values());
你应该是同个key获取值,而你的查看页面却是根据用户名在取值,肯定取不到的
model.addAttribute("user",users.get(username));