flag 和isAccept
在reg.jsp里將isAccept改為flag后, 為什么RegServlet.java中if(request.getParameterValues("isAccept")!=null)不用該,改為flag后反而錯誤,這個isAccept難道不是對應表單中flag?
在reg.jsp里將isAccept改為flag后, 為什么RegServlet.java中if(request.getParameterValues("isAccept")!=null)不用該,改為flag后反而錯誤,這個isAccept難道不是對應表單中flag?
2016-11-13
舉報
2017-03-05
因為usebean是以javabean中的變量名為基礎去使用的,與表單名無關,只是會自動將表單傳遞過來的同名變量中的值放進對應的javabean變量中而已,另外經過我的測試,將表單中的isAceept設置為flag后,由于name不對應,所以獲取不到它的值,會報空指針異常,假如你之前獲取成功了,應該是因為你沒有刷新reg.jsp,直接返回并測試的。
2016-11-19
我也有這個疑問,然后我理了一下思路,你看看能不能幫到你,雖然說得有點啰嗦,但希望你跟著我的思路去對應看一下代碼的位置,以及先后順序,才能更好理解。
1.先搞清楚每個頁面及類的含義:
reg.jsp —— 用戶填寫表單的界面
RegServlet.java —— 暫時想象成?加工廠
users.java —— 用戶信息類(即javabean,想象成?模型)
userInfo.jsp —— 是servlert的dopost()重定向到的頁面(及展示獲取信息后的頁面)
這里的跳轉順序:
reg.jsp —— ?RegServlet.java ——userInfo.jsp 【在使用?加工廠的途中,調用模型,對模型進行寫讀】
------------------------------------------------------------------------------------------------------------
2.關于flag與isAcccept出現的位置?[以老師最后修改后測試成功來解釋]
reg.jsp —— <input name="isAccpet">
RegServlet.java —— ?String IsAccept;?? 以及 if(IsAccept.indexOf("true"))?{......} else{........}
users.java —— ?private boolean flag; 以及get/set方法為getFlag()/setFlag()
userInfo.jsp —— ?<jsp:getproperty name ="regUser" ?property="flag">
-------------------------------------------------------------------------------------
3.結論
我想你知道<jsp:getproperty >這個用法是獲得javabean的屬性值的吧
所以<jsp:getproperty name ="regUser" ?property="flag">?
?這個flag值只對應users.java 這個javabean里面的變量名
即這里的userInfo.jsp、users.java頁面都是用flag
而RegServlet類中的?if(request.getParameterValues("isAccept")!=null)?這里的isAccept是reg.jsp頁面中表單提交過來的,所以這里的isAccept對應的是reg.jsp 頁面中的 <input name="isAccpet">,而不是用flag
2016-11-13
課程里修改了一次Users類的屬性的原因是這樣,因為對于bool類型的屬性,用編譯器的簡便方法生成對應的set方法時,并不像其他類型,會是set+屬性名,而是is+屬性名。為了避免理解問題,更換了屬性名,并且重命名了set方法。isAccept只是在RegServlet中的doPost方法中聲明的局部變量,一個String類型的變量,而if語句的作用是判斷表單傳遞的參數是否為空,注意表單中條款項的 name也改為isAccept。