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