我想使用Web表单提交一些信息,然后JSP页面将显示输入的表单信息。但是当我单击表单中的提交按钮时,它会传递正确的JSP文件,但所有表单值都显示为“null”。我正在使用Jersey来做POST请求。
表格是:
<form action="/MyRestWS/rest/customer/created" method="POST">
<table border="1">
<tr>
<td>Customer name:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>Customer ID:</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td>Customer DOB:</td>
<td><input type="text" name="dob"></td>
</tr>
</table>
<br/>
<input type="submit" value="Submit">
</form>
执行请求的代码是:
@Path("/customer")
public class CustomerService {
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("created")
public Response createCustomer(@FormParam("id") int id, @FormParam("name") String name, @FormParam("dob") Date dob) {
Response r;
r = Response.ok().entity(new Viewable("/confirm.jsp")).build();
return r;
}
@GET
@Produces(MediaType.TEXT_HTML)
public Viewable displayForm() {
return new Viewable("/form.html");
}
}
显示的JSP文件为confirm.jsp
,其内容为:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Your entered information</title>
</head>
<body>
<h2>
<%
out.println("You've entered the following information:");
%>
</h2>
<p>
Customer Name:
<%=request.getParameter("name")%></p>
<p>
Customer ID:
<%=request.getParameter("id")%></p>
<p>
Customer DOB:
<%=request.getParameter("dob")%></p>
</body>
</html>
如果我在浏览器中输入以下地址:
http://localhost:8080/MyRestWS/rest/customer
它会显示表格中的form.html
。在我填写信息并单击“提交”后,它将转到以下地址并显示路径指定的JSP文件:
http://localhost:8080/MyRestWS/rest/customer/created
JSP文件正确显示,但所有客户信息字段显示为“null”,如下所示:
You've entered the following information:
Customer Name: null
Customer ID: null
Customer DOB: null
那么为什么我在提交表单后在JSP中获取空值?我的代码出了什么问题?
答案 0 :(得分:3)
您正在尝试显示不再存在的请求参数;它们仅在第一个请求,表单提交期间存在。
如果您想再次显示 ,则需要将它们作为请求属性公开给视图层。
(也就是说,如果他们作为构建课程的一部分被曝光,我会更高兴。)
答案 1 :(得分:0)
根据Dave的建议,我在createCustomer()
方法中添加了以下请求属性,并使用request.getAttribute()
中的confirm.jsp
来检索输入的表单数据。它终于奏效了。在我提交表单后,confirm.jsp文件可以正确显示所有信息。
request.setAttribute("name", name);
request.setAttribute("dob", dob);
request.setAttribute("id", Integer.valueOf(id));
RequestDispatcher dispatcher = request.getRequestDispatcher("/confirm.jsp");
dispatcher.forward(request, response);
但是,一方面的问题是:我必须在类字段中使用以下注入:
@Context HttpServletRequest request;
@Context HttpServletResponse response;
如果我使用以下代码,我将收到异常错误:
@Context ServletRequest request;
@Context ServletResponse response;
为什么?