【问题标题】:request.getAttribute returning null in servlet [duplicate]request.getAttribute 在 servlet 中返回 null [重复]
【发布时间】:2017-01-05 12:08:44
【问题描述】:

在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 值

【问题讨论】:

  • 你是如何提交表单的?
  • 我在表单中有一个按钮
  • 我在那边看不到任何提交按钮
  • 我已经更新了我的问题
  • 在你的 daycare() 中写下代码 document.getElementById("YOUR FORM ID ").submit();并删除这个 ?from=amount

标签: jsp servlets


【解决方案1】:

试试下面的代码:

<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

【讨论】:

  • 提交是一个按钮,而不是文本字段
  • 但是在你的代码中我只能看到文本框,而不是按钮,试试我的代码
  • 我想要 servlet 中的“formName”而不是 javascript
  • 检查是否可以通过在表单中​​设置隐藏字段来获取表单名称
  • 但它会在我的表单中添加一个文本字段。
【解决方案2】:

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

servlet 在传递给 jsp 之前被调用。因此,当从 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");

【讨论】:

  • 你能用代码支持你的回答吗
  • 我现在明白了这个问题。所以现在我应该添加 session.getAttribute("formName") ?
  • 我已将代码更改为您建议的任何内容。但我仍然为空
  • @RadhikaKulkarni 是的,正如您在答案的底部看到的那样。
  • @RadhikaKulkarni jsp的代码是在Servlet之前执行的吗?在jsp中设置属性formName(在会话中,不在请求中)?
猜你喜欢
  • 2018-01-29
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2021-07-24
  • 1970-01-01
  • 2021-12-10
相关资源
最近更新 更多