java - Getting a null value on my arraylist.set(). using jsp -
my objective add words html form, store them in array, display them in page, , have 2 links 1 delete item , 1 edit item(the word edit entered in html form).
i using arraylist store input coming input type. able add , delete item, when tried change value of item in arraylist (i using arraylist.set()), value returns null. if hard code set() see item change reason can't value input type. wondering missing.
i have 2 jsp pages. main.jsp , edit.jsp. 1 java class wordoperations validations
here code sorry if messy , if doesn't display right in here. first time posting on stackoverflow
any appreciated. thanks
this code form display items main.jsp
<h3>word list</h3> <form action="wordoperations" method="post"> word: <input type="text" name="newword"> <input type="submit" value="add"> </form> <br/> <% arraylist<string> words = (arraylist<string>) session.getattribute("words"); if (words!=null) { (int i=0; i<words.size(); i++) { out.println("<p>" + "<a href='http://www."+ words.get(i) +".com'>" + words.get(i) +"</a>" + " <a href='wordoperations?delete=" + + "'>delete</a> <a href='wordoperations?edit=" + + "'>edit</a></p>"); } } %> this code enter new information edit.jsp
<form action="wordoperations?" method="post"> new link:<input type="text" name="userchange"> <input type="submit" name="userchangepassword" value="change link"> </form> and code validation of forms wordoperations.java
httpsession session = request.getsession(); string newword = request.getparameter("newword"); string delete = request.getparameter("delete"); string edit = request.getparameter("edit"); string newlink = request.getparameter("userchange"); if (delete!=null) //delete word { int delindex = integer.parseint(delete); arraylist<string> words = (arraylist<string>) session.getattribute("words"); words.remove(delindex); requestdispatcher rd = getservletcontext().getrequestdispatcher("/main.jsp"); request.setattribute("message", "word deleted"); rd.forward(request, response); } else if(edit !=null) { int edindex = integer.parseint(edit); string link = newlink; arraylist<string> words = (arraylist<string>) session.getattribute("words"); words.set(edindex,"google"); words.add(newlink); requestdispatcher rd = getservletcontext().getrequestdispatcher("/edit.jsp"); request.setattribute("message", "word edited"); rd.forward(request, response); } else //logging in { if (newword!=null && !newword.equals("")) { arraylist<string> words = (arraylist<string>) session.getattribute("words"); words.add(newword); requestdispatcher rd = getservletcontext().getrequestdispatcher("/main.jsp"); request.setattribute("message", "word added"); rd.forward(request, response); } else { requestdispatcher rd = getservletcontext().getrequestdispatcher("/main.jsp"); request.setattribute("message", "word required"); rd.forward(request, response); } }
it's logical mistake ..
you running servlet wordoperations.java twice in editing word , passing edit parameter once , passing userchange parameter in , not solve problem.
here mistake.
but first set arraylist words in session on adding of first word. can this:
else //logging in { if (newword != null && !newword.equals("")) { arraylist<string> words = (arraylist<string>) s.getattribute("words"); if (words == null) { words = new arraylist<>(); words.add(newword); s.setattribute("words", words); } else { words.add(newword); } requestdispatcher rd = getservletcontext().getrequestdispatcher("/main.jsp"); request.setattribute("message", "word added"); rd.forward(request, response); } now here mistake :
when arraylist words listed down in main.jsp. contains
word delete_link edit_link
now delete_link > <a href='wordoperations?delete=" + + "'>delete</a> working fine because redirecting wordsoperations.java parameter delete = i , deleting word arraylist.
wordsoperations.java
string delete = request.getparameter("delete"); if (delete!=null) //delete word { int delindex = integer.parseint(delete); arraylist<string> words = (arraylist<string>) session.getattribute("words"); words.remove(delindex); requestdispatcher rd = getservletcontext().getrequestdispatcher("/main.jsp"); request.setattribute("message", "word deleted"); rd.forward(request, response); } but
in edit_link > <a href='wordoperations?edit=" + + "'>edit</a> calling servlet wordsoperations.java parameter edit = i , not passing userchange parameter it.
thus newlink null on
string newlink = request.getparameter("userchange");
so code in wordsoperation.java i.e
else if(edit !=null) { int edindex = integer.parseint(edit); string link = newlink; arraylist<string> words = (arraylist<string>) session.getattribute("words"); words.set(edindex,"google"); words.add(newlink); requestdispatcher rd = getservletcontext().getrequestdispatcher("/edit.jsp"); request.setattribute("message", "word edited"); rd.forward(request, response); } will executed edit!=null true. add newlink in arraylist words happens null. hence null getting added list.
there no problem arraylist.set() method.
now in above code calling edit.jsp after adding newlink. when wordsoperation.java gets called edit.jsp form, passing userchange parameter , not edit parameter needed there execute else if(edit!=null) block of servlet wordsoperations.java.
<form action="wordoperations?" method="post"> new link:<input type="text" name="userchange"> <input type="submit" name="userchangepassword" value="change link"> </form> rest on you. take care pass edit , userchange parameter both servlet wordsoperations.java work done.
suggestion: pass edit parameter edit.jsp , pass edit , userchange parameter wordsoperation.java.
hope helps.
Comments
Post a Comment