request.setAttribute() 设置的值不适用于 request.getParameter() [重复]
Posted
技术标签:
【中文标题】request.setAttribute() 设置的值不适用于 request.getParameter() [重复]【英文标题】:Value set by request.setAttribute() is not available by request.getParameter() [duplicate] 【发布时间】:2020-03-06 16:29:00 【问题描述】:我遇到一个问题,即 servlet 接收到从另一个 servlet 转发的请求参数为 null。
这是使用 JPA 和实体管理器来管理 Student(id PK) 实体 Subject(subjectCode PK) 实体多对多关系的 Java Web 应用程序的一部分。
String code = (String) request.getParameter("subCode");
int id = Integer.parseInt((String) request.getParameter("stdToAdd"));
studentFacade.addSubject(id, code);
subjectFacade.addStudent(id,code);
request.setAttribute("subjectCode", code);
request.getRequestDispatcher("ListSubStd").forward(request, response);
String code = (String) request.getParameter("subjectCode");
System.out.println("Subject code: " + code+"\n");
//this prints null when called from the above servlet code
List<Student> students = subjectFacade.getStudents(code);
Subject subject = subjectFacade.find(code);
request.setAttribute("subjectStudentList",students);
request.setAttribute("subject", subject);
request.getRequestDispatcher("ListSubjectStudents.jsp").forward(request, response);
我遇到了一个问题,即在第二个 servlet 中,subjectCode 被接收为 null。
以下两个 servlet 也会出现同样的问题:
int id = Integer.parseInt((String) request.getParameter("stdId"));
String code = (String) request.getParameter("subToAdd");
studentFacade.addSubject(id, code);
subjectFacade.addStudent(id,code);
request.setAttribute("studentId", id);
request.getRequestDispatcher("ListStdSub").forward(request, response);
System.out.println("String passed is : "+request.getParameter("studentId"));
//prints null here as well, but only when called from the servlet above
int id = Integer.parseInt((String) request.getParameter("studentId"));
List subjects = studentFacade.getSubjects(id);
Student student = studentFacade.find(id);
request.setAttribute("studentSubjectList",subjects);
request.setAttribute("student",student);
request.getRequestDispatcher("ListStudentSubjects.jsp").forward(request, response);
servlet 正确地编辑了关系,但是发送到第二个 servlet 的参数存在问题。
任何建议表示赞赏。
【问题讨论】:
因为你混淆了属性和参数。改为String code = (String) request.getAttribute("subjectCode");
【参考方案1】:
您正在为请求设置属性,但使用 request.getParameter()。 相反,您应该使用 request.getAttribute() 方法
第一部分
String code = (String) request.getAttribute("subjectCode");
System.out.println("Subject code: " + code+"\n");
第二部分
System.out.println("String passed is : "+request.getAttribute("studentId"));
int id = Integer.parseInt((String) request.getAttribute("studentId"));
【讨论】:
以上是关于request.setAttribute() 设置的值不适用于 request.getParameter() [重复]的主要内容,如果未能解决你的问题,请参考以下文章
JSP request.setAttribute()详解及实例
request.getAttribute()与request.setAttribute()
说说request.getParameter/setAttribute/getAttribute的区别
Java servlet:request.getParameter 和 request.setAttribute 以我不理解的方式连接 [重复]