Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 717
  • Last Modified:

sendRedirect and querystring

currently i'm doing the following:
res.sendRedirect(ServletUtilities.urlServlet + "AdminTopicsRequired?updatedTopic=" + whichTopic);

but when it redirects it obviously has the querystring in the location textbox of the browser.  I am calling a servlet to update my database and the servlet sends us back to the submit page.  the querystring verifies that the transaction took place and the javascript in the page alerts that it in fact did.  The problem is that if the user refreshes, that alert will show up even though it didn't do anything.  

my question is:
how do i tell the submit page that the transaction was ok without using querystring.

thanks in advance
0
bobbit31
Asked:
bobbit31
  • 7
  • 6
1 Solution
 
bagi112599Commented:
In order to submit page that the transaction was ok without using querystring:
Basically you use request.setAttribute(strBeanName, objBean) method.

So, in your servlet:
 
 public void doPost(HttpServletRequest request, HttpServletResponse response){
 ....
   // create a Bean:
  MyBean myBean =  new MyBean();
  // set properties to be read on JSP page:
  myBean.setName("Bob");
...
  // attach bean object to request:
  request.setAttribute("aBean", myBean);

  ..
  // redirect from servlet to jsp page called 'myJsp':
  this.getServletContext().getRequestDispatcher("myJsp.jsp").forward(request, response);
}

And, in you jsp:
...
<jsp:useBean id="aBean" class="MyBean" scope="request" />

...
<td>Client Name: </td>
<td><jsp:getProperty name="aBean" property="name"/>
</td>...

or, altenatively on JSP:
...
<% MyBean myBean  = (MyBean)request.getAttribute("aBean"); %>
...
<td>Client Name: </td>
<td><%=myBean.getName()%>
</td>
...


Code for MyBean class:

class MyBean {
private String name;
public String getName(){
     return name;
}
public void setName(String str){
     name= str;
}
}

TIP: If you use

public String getName(){
     return (name==null)?"":name;
}
method, then it won't print 'null' on browser, when name attribute is null.



0
 
bobbit31Author Commented:
ok, but i still have the same problem... now i get this in the location text box:

http://localhost/servlet/UpdateTopicsRequired?selTopic=3&selCampus=1&selDept=3&selEmployee=3&cmdAdd=Add+Requirement%28s%29

0
 
bobbit31Author Commented:
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
nimaigCommented:
This is just an idea. Try using cookies. Set the cookie when the User submitsa the page.
When you redirect it back to the SubmitPage check for the cookie. If the cookie is present
display the alert. After doing this remove the cookie. After thet if user refreshes the page also
your code won't find the cookie and it won't disply the alert.
0
 
bagi112599Commented:
put all your vars in
selTopic, selCampus, selDept, selEmployee, cmdAdd etc
in a form if you haven't done so and change form method to POST.
It looks like you are using Method=GET
or Method not specified(thenbrowser defaults it to GET)
Then it wan't show query string in Address field.
0
 
bagi112599Commented:
And remember to handle client requests in your servlet's
doPost method.
0
 
bobbit31Author Commented:
nimiag: sorry, can't be sure everyone will have cookies enabled.

bagi: getting closer!

now i get http://localhost/servlet/UpdateTopicsRequired
which is the servlet that handles the database update

but i want http://localhost/servlet/AdminTopicsRequired 
which is the servlet that generates the submit page

in the location box
0
 
bobbit31Author Commented:
increasing points since i might as well use the ee-kpro points before i get refilled
0
 
bagi112599Commented:
now,when instead of
res.sendRedirect(ServletUtilities.urlServlet + "AdminTopicsRequired?updatedTopic=" + whichTopic);

use :
attach value of "updatedTopic" to request as described in my first comment and use:

res.sendRedirect(ServletUtilities.urlServlet + "AdminTopicsRequired");

More specifically:
public void doPost(HttpServletRequest request, HttpServletResponse res){
....
 String whihTopic =  "This Topic";
 // attach topic info to request:
 request.setAttribute("updatedTopic", whihTopic);

 ..
 // redirect from servlet to AdminTopicsRequired:
res.sendRedirect(ServletUtilities.urlServlet + "AdminTopicsRequired");


And, in your AdminTopicsRequired:
...
...
 String whichTopic  = (String)request.getAttribute("updatedTopic");
...
...
0
 
bobbit31Author Commented:
i have it exactly as you state but in AdminTopicsRequired:

String whichTopic is always null...
0
 
bagi112599Commented:
try to use  
this.getServletContext().getRequestDispatcher("AdminTopicsRequired").forward(request, response);

instead of
res.sendRedirect(ServletUtilities.urlServlet + "AdminTopicsRequired");

Or alternativley,
public void doPost(HttpServletRequest request, HttpServletResponse res){
....
String whihTopic =  "This Topic";
// attach topic info to request:
res.setAttribute("updatedTopic", whihTopic);

..
// redirect from servlet to AdminTopicsRequired:
res.sendRedirect(ServletUtilities.urlServlet + "AdminTopicsRequired");


And, in your AdminTopicsRequired:
...
...
String whichTopic  = (String)res.getAttribute("updatedTopic");

NOTE:
I attached "updatedTopic" to response this time.

When we use
res.sendRedirect(ServletUtilities.urlServlet + "AdminTopicsRequired");
request object is not forwarded to AdminTopicsRequired.

cheers,
0
 
bobbit31Author Commented:
HttpServletResponse does not have the setAttribute method.

i'm gonna go about this another way using session variables.

you get the points anyway, thanks for your help!
0
 
bagi112599Commented:
thanks for points but,
did you try my first suggestion:
this.getServletContext().getRequestDispatcher("AdminTopicsRequired").forward(request, response);
?
0
 
bobbit31Author Commented:
yes...

basically the goal i wanted was:

if they do an update, do it, send them back to the submit page and display a message.  If they refresh the submit page DO NOT show the message again.

even if i were to do it your way, the refresh would still show the message since the attribute would still be set.

0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 7
  • 6
Tackle projects and never again get stuck behind a technical roadblock.
Join Now