解決form表單資料提交不到servlet中去的問題
阿新 • • 發佈:2019-01-11
servlet用的baseservlet繼承,反射獲取url地址中的method的地址
@WebServlet("/orders")
public class OrderServlet extends BaseServlet{
// 3.增加配送通知單
public void addOrder(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
// 測試是否呼叫此方法
System.out.println("進入addOrder()" );
// 獲取來自providerManage.jsp中id為fm的form表單傳過來的資料,用來新增配送通知單.
String cidStr = req.getParameter("cid");
String username = req.getParameter("username");
String telephone = req.getParameter("telephone");
String address = req.getParameter("address");
String name = req.getParameter ("name");
//測試資料接收是否成功
System.out.println("cid : "+cidStr);
System.out.println("username : "+username);
System.out.println("address : "+address);
System.out.println("telephone : "+telephone);
// 把有些引數轉換成int類,因為這些引數在資料庫中是int型別
int cid = Integer.parseInt (cidStr);
OrderService orderService = new OrderService();
orderService.addOrder(username, username, address, telephone, cid);
// 獲取該使用者通知單,再次傳送至頁面
OrderService service = new OrderService();
List<Orders> orderList = service.findAllOrdersByCid(cid);
req.setAttribute("orderList", orderList);
System.out.println("orderList : "+orderList);
req.getRequestDispatcher("customer_orderlist.jsp").forward(req, resp);
System.out.println("addOrder結束");
}
jsp頁面中的表單傳送至該servlet,但是控制檯列印始終顯示為空
<form action="${pageContext.request.contextPath}/orders?oid=${oid}&cid=${cid}">
<table border="1px">
請教同學後解決了問題
1.首先jsp頁面中加上以下程式碼
<form action="${pageContext.request.contextPath}/orders?oid=${oid}&cid=${cid}">
<table border="1px">
<!--新增下面的input-->
<input type="hidden" name="method" value="addOrder" />
一個隱藏的input
2.再把orders?後面的oid={cid}給刪掉
<form action="${pageContext.request.contextPath}/orders">
<table border="1px">
<!--新增下面的input-->
<input type="hidden" name="method" value="addOrder" />
原因: servlet用了反射的方法來獲取方法名,在servlet方法中用req.getParameters(),就無法獲取jsp中form傳來的資料,
因此,在jsp中加上一個隱藏的input,把方法名傳過去也一樣,其他資料也可用隱藏的input傳到servlet去