Jsp JavaBean值不';不应邮政要求出现

Jsp JavaBean值不';不应邮政要求出现,jsp,servlets,javabeans,Jsp,Servlets,Javabeans,我有一个servlet和JSP,它们共享JavaBean实例——servlet初始化它们(因为Bean需要构造函数参数)并将它们存储在会话中,然后转发给JSP,JSP获取用户输入并通过表单POST请求提交回servlet。在servlet的doPost方法中,它再次检索JavaBean,但是表单设置的所有值都为null。如果我在表单上使用GET方法,则会填充值,并且在调试时,我可以看到JavaBean属性值实际上已经设置好了。那么为什么我的doPost方法从会话中检索具有空值的bean呢?有趣的

我有一个servlet和JSP,它们共享JavaBean实例——servlet初始化它们(因为Bean需要构造函数参数)并将它们存储在会话中,然后转发给JSP,JSP获取用户输入并通过表单POST请求提交回servlet。在servlet的
doPost
方法中,它再次检索JavaBean,但是表单设置的所有值都为null。如果我在表单上使用GET方法,则会填充值,并且在调试时,我可以看到JavaBean属性值实际上已经设置好了。那么为什么我的
doPost
方法从会话中检索具有空值的bean呢?有趣的是,通过每个对象的构造函数参数传入的字段实际上是正确设置的,无论是GET还是POST,只是那些通过表单管理的属性没有设置

缩写代码示例

Servlet

JSP


...
标题
姓名
...

当我在此表单中输入数据并单击“下订单”时,toString()调用的输出将
customer
address
的所有字段显示为空。

因此,我想要的似乎是不可能的-我需要的是
,但在我提供另一个JSP之前它是不可用的,在访问servlet中的bean之后,我希望执行此操作。因此,我可以执行以下操作之一:

  • 在使用servlet中的bean之前,重定向到另一个JSP以填充我的值
  • 手动设置值
  • 使用反射设置它们(可能是可伸缩性的赢家)
  • 可能使用类似

在代码中如何以及在何处设置这两个对象的属性?据我所知(我承认我是JSP新手),它们是在
中设置的。但是现在这已经开始有意义了,因为这段代码只在GET上执行——因为POST在返回这里之前经过servlet,所以没有设置任何值。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    HttpSession session = request.getSession();
    Customer customer = (Customer)session.getAttribute("customer");
    if (customer == null)
    {
        customer = new Customer(.....);
        session.setAttribute("customer", customer);
    }
    Address address = (Address)session.getAttribute("address");
    if (address == null)
    {
        address = new Address(.....);
        session.setAttribute("address", address);
    }
    forward("/checkout.jsp", request, response);
}
...
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    PrintWriter out = response.getWriter();
    Customer customer = (Customer)request.getSession().getAttribute("customer");
    if (customer != null)
    {
        out.println("Customer: " + customer.toString());
    }
    Address address = (Address)request.getSession().getAttribute("address");
    if (address != null)
    {
        out.println("Address: " + address.toString());
    }
}
<jsp:useBean id="customer" class="com.mycompany.myproject.Customer" scope="session" />
<jsp:setProperty name="customer" property="*"/>
<jsp:useBean id="address" class="com.mycompany.myproject.Address" scope="session" />
<jsp:setProperty name="address" property="*"/>

...

<form method="POST" action="${pageContext.request.contextPath }/checkout">
    <table>
        <tr>
            <td>Title</td>
            <td><input type="text" name="title" value="${ customer.title }" /></td>
        </tr>
        <tr>
            <td>Given name</td>
            <td><input type="text" name="givenName" value="${ customer.givenName }" /></td>
        </tr>
        ...
    </table>
    <input type="submit" value="Place order" />
</form>