request.getAttribute在servlet中返回null

时间:2016-08-29 12:40:57

标签: jsp servlets

在jsp中,我写了以下代码:

    <form action="./ssoServlet?from=amount" method="post">
    <%request.setAttribute("formName", "DayCareForm"); %>
    Amount  
     <input type="text" name="amount" id="amount" required >
     <button onclick="dayCarePdf()" type="submit"> Convert to PDF </button>
    </form>

servlet的post方法是:

@Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("DoPost method");
        resp.setContentType("text/html");

        if(req.getParameter("from").equals("amount"))
        {
            req.getParameter("amount");

            String form = (String) req.getAttribute("formName");
            System.out.println("Type of form " +req.getAttribute("formName"));
            RequestDispatcher dispature = getServletContext().getRequestDispatcher("/DayCare.jsp");
            dispature.forward(req, resp);
        }
}

但是,servlet为表单类型返回null值

2 个答案:

答案 0 :(得分:0)

在jsp中你在请求中设置一个值。所以它只适用于请求的生命周期。

在传递给jsp之前调用servlet。因此,当从servlet中的请求中检索属性时,它还不存在。

将它放入会话中并且有效。

当你到达该行时:

String form = (String) request.getAttribute("formName");

代码

req.setAttribute("formName", something) 
尚未为当前请求设置

代码

<%request.setAttribute("formName", "DayCareForm"); %>

上一个请求中执行。每次传递给servlet时,都会重置请求属性。

但您可以设置属性并从会话中检索属性。在这种情况下,它可以工作,因为会话在浏览器关闭或会话失效时结束。

使用会话而不是请求替换

<%request.setAttribute("formName", "DayCareForm"); %>

<%session.setAttribute("formName", "DayCareForm"); %>

String form = (String) request.getAttribute("formName");

String form = (String) request.getSession().getAttribute("formName");

答案 1 :(得分:0)

尝试以下代码:

<form action="./ssoServlet" method="post" id="myForm" name="DayCareForm">
Amount  
 <input type="text" name="amount" id="amount" required >
 <input type="hidden" name="formName" value="DayCareForm" />
<button onclick="dayCarePdf()" type="submit"> Convert to PDF </button>
</form>

<强> JavaScript的:

function dayCarePdf()
{
    document.getElementById("myForm").submit();

//Rest Code will come here


}

将隐藏字段设置为表单名称,您可以通过以下代码访问表单名称。

   String formName= request.getParameter ("formName");  // you will get DayCareForm as we set form name