request.getAttribute 在 servlet 中返回 null [重复]

Posted

技术标签:

【中文标题】request.getAttribute 在 servlet 中返回 null [重复]【英文标题】:request.getAttribute returning null in servlet [duplicate] 【发布时间】: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 【参考方案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(在会话中,不在请求中)?

以上是关于request.getAttribute 在 servlet 中返回 null [重复]的主要内容,如果未能解决你的问题,请参考以下文章

request.getParameter() 和request.getAttribute() 区别

request.getAttribute

request.getAttribute() session.getAttribute() application.getAttribute() 的getAttribute方法有区别

request.getAttribute 在 servlet 中返回 null [重复]

request.getAttribute() 和 request.getParameter() 有何区别?

request.getAttribute()和request.getParameter()区别