Solved

sendRedirect and querystring

Posted on 2001-06-28
14
690 Views
Last Modified: 2012-08-13
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
Comment
Question by:bobbit31
  • 7
  • 6
14 Comments
 
LVL 2

Expert Comment

by:bagi112599
Comment Utility
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
 
LVL 18

Author Comment

by:bobbit31
Comment Utility
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
 
LVL 18

Author Comment

by:bobbit31
Comment Utility
0
 
LVL 9

Expert Comment

by:nimaig
Comment Utility
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
 
LVL 2

Expert Comment

by:bagi112599
Comment Utility
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
 
LVL 2

Expert Comment

by:bagi112599
Comment Utility
And remember to handle client requests in your servlet's
doPost method.
0
 
LVL 18

Author Comment

by:bobbit31
Comment Utility
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
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 
LVL 18

Author Comment

by:bobbit31
Comment Utility
increasing points since i might as well use the ee-kpro points before i get refilled
0
 
LVL 2

Accepted Solution

by:
bagi112599 earned 200 total points
Comment Utility
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
 
LVL 18

Author Comment

by:bobbit31
Comment Utility
i have it exactly as you state but in AdminTopicsRequired:

String whichTopic is always null...
0
 
LVL 2

Expert Comment

by:bagi112599
Comment Utility
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
 
LVL 18

Author Comment

by:bobbit31
Comment Utility
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
 
LVL 2

Expert Comment

by:bagi112599
Comment Utility
thanks for points but,
did you try my first suggestion:
this.getServletContext().getRequestDispatcher("AdminTopicsRequired").forward(request, response);
?
0
 
LVL 18

Author Comment

by:bobbit31
Comment Utility
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

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Suggested Solutions

After being asked a question last year, I went into one of my moods where I did some research and code just for the fun and learning of it all.  Subsequently, from this journey, I put together this article on "Range Searching Using Visual Basic.NET …
For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now