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 以我不理解的方式连接 [重复]

后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值

后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值