Това е първото ми MVC приложение. Имам файл Controller.java, 3 JSP файла и един JavaBean. В моя контролер имам условен израз, който изпраща потребителя към невалидна страница с дата, когато въведе дата ‹ или = днешна дата. Проблемът е, че когато потребителят натисне бутона за връщане назад в браузъра и въведе валидна дата, единствената страница, която продължава да се обслужва от моя контролер, е страницата с невалидна дата. какво правя грешно Опитах се да потърся отговор онлайн, но не успях да намеря подобен проблем (или поне аз лично не можах да намеря такъв).
Ето моя файл Controller.java:
public class Controller extends HttpServlet {
public static final String BOOKING="booking";
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws javax.servlet.ServletException
* @throws java.io.IOException
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
ServletContext servletContext = getServletContext();
String address;
String hikeName = request.getParameter("hikeName");
String duration = request.getParameter("dur");
String hikeDate = request.getParameter("hikeDate");
Booking b = (Booking) session.getAttribute(BOOKING);
if (b == null) {
b = new Booking();
session.setAttribute(BOOKING, b);
address = "/bookingView.jsp";
RequestDispatcher dispatcher = servletContext.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
else {
if (b.dateCompare(hikeDate)) {
b.calculateCost(duration, hikeDate);
RequestDispatcher dispatcher;
dispatcher = servletContext.getRequestDispatcher("/quoteView.jsp");
dispatcher.forward(request, response);
} else {
session.getAttribute(BOOKING);
RequestDispatcher dispatcher1 = servletContext.getRequestDispatcher("/index.jsp");
dispatcher1.forward(request, response);
}
}
}
Ето моят JavaBean:
public class Booking {
private String hikeName;
private String begDate;
private String endDate;
private String dur;
private int baseRate = 60;
private int duration = 0;
private int cost = 0;
private double premiumRate = baseRate * 1.5;
private DateTime jbegDate = new DateTime();
private DateTime jendDate = new DateTime();
private Boolean success = true;
private DateTime today = new DateTime();
DateTimeFormatter f = DateTimeFormat.forPattern("MM/dd/YYYY");
private LocalDate myDate = new LocalDate();
private LocalDate myDate2 = new LocalDate();
public void setHikeName(String hikeName) {
this.hikeName = hikeName;
}
public String getHikeName() {
return hikeName;
}
public void setBaseRate(int baseRate){
this.baseRate = baseRate;
}
public int getBaseRate(){
return baseRate;
}
public void setPremiumRate(int premiumRate){
this.premiumRate = premiumRate;
}
public double getPremiumRate(){
return premiumRate;
}
public void setDur(String dur){
this.dur = dur;
}
public String getDur(){
return dur;
}
public void setBegDate(String begDate){
this.begDate = begDate;
}
public String getBegDate(){
return begDate;
}
public void setEndDate(String dur, String begDate){
duration = Integer.parseInt(dur);
this.begDate = begDate;
DateTime dateOfHike = f.parseDateTime(begDate);
jendDate = dateOfHike.plusDays(duration - 1);
endDate = jendDate.toString(f);
this.endDate = endDate;
}
public String getEndDate(){
return endDate;
}
public Boolean dateCompare(String begDate){
myDate = f.parseLocalDate(begDate);
if (myDate.isBefore(myDate2) || myDate.isEqual(myDate2))
success = false;
return success;
}
public Boolean getSuccess(){
return success;
}
public int getCost() {
return cost;
}
public int calculateCost(String dur, String begDate){
duration = Integer.parseInt(dur);
this.begDate = begDate;
DateTime dateOfHike = f.parseDateTime(begDate);
jendDate = dateOfHike.plusDays(duration - 1);
int premiumDays = 0;
int normalDays = 0;
while (dateOfHike.isBefore(jendDate)) {
int dayOfWeek = dateOfHike.getDayOfWeek();
if (dayOfWeek == 6 || dayOfWeek == 7) {
premiumDays++;
} else {
normalDays++;
}
dateOfHike = dateOfHike.plusDays(1);
}
if (jendDate.getDayOfWeek() == 6 || jendDate.getDayOfWeek() == 7) {
premiumDays++;
} else {
normalDays++;
}
cost = (int) (normalDays * baseRate + premiumDays * premiumRate);
return cost;
}
}
В страницата с JSP формуляр (bookingView.jsp) просто събирам 3 параметъра, използвайки текстово поле и две падащи менюта. Тук използвам метод GET.
В страницата quoteView.jsp представям на потребителя таблица, която съдържа 3-те параметъра заедно с изчислена крайна дата и изчислена цена на пътуването. Това е мястото, където администраторът трябва да изпрати потребителя, като приеме, че е въвел валидни данни във формуляра.
Ако не са въвели валидна дата, виждат формуляра index.jsp, който просто им казва да се върнат и да въведат валидна дата. Това е мястото, където кодът се забива (което означава, че след като отиде на тази страница, той остава на тази страница, независимо дали потребителят въвежда валидни данни или не). При всяка следваща заявка виждам, че данните, които избирам във формуляра, се предават при SUBMIT в адресната лента с помощта на HTTP GET. Но моят контролер не използва параметрите на заявката, за да актуализира моя изглед...
processRequest
? - person Serge Ballesta   schedule 09.08.2014