我想使用Web表单提交一些信息,然后JSP页面将显示输入的表单信息。但是,当我单击表单中的提交按钮时,它将进入正确的JSP文件,但是所有表单值都显示为“空”。我正在使用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,其内容为:
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文件:
form.html
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中获得空值?我的代码有什么问题?
您正在尝试显示不再存在的请求参数。它们仅在 第一个 请求(表单提交)期间存在。
如果要 再次 显示它们 ,则 需要将它们作为请求 属性 公开给视图层。
(也就是说,如果将它们作为构造类的一部分公开,我会更高兴。)