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() session.getAttribute() application.getAttribute() 的getAttribute方法有区别
request.getAttribute 在 servlet 中返回 null [重复]