Java Intro to Java Web Development with Spark Bells and Whistles Redirecting

Ronald Greer
Ronald Greer
33,676 Points

not sure what to do.

i hsave reviewed the video a thousand times.

com/teamtreehouse/courses/Main.java
package com.teamtreehouse.courses;

import com.teamtreehouse.courses.model.CourseIdea;
import com.teamtreehouse.courses.model.CourseIdeaDAO;
import com.teamtreehouse.courses.model.SimpleCourseIdeaDAO;
import spark.ModelAndView;
import spark.template.handlebars.HandlebarsTemplateEngine;

import java.util.HashMap;
import java.util.Map;

import static spark.Spark.*;

public class Main {
    public static void main(String[] args) {
        staticFileLocation("/public");
        CourseIdeaDAO dao = new SimpleCourseIdeaDAO();

        get("/", (req, res) -> {
            Map<String, String> model = new HashMap<>();
            model.put("username", req.cookie("username"));
            return new ModelAndView(model, "index.hbs");
        }, new HandlebarsTemplateEngine());

        post("/sign-in", (req, res) -> {
            Map<String, String> model = new HashMap<>();
            String username = req.queryParams("username");
            res.cookie("username", username);
            model.put("username", username);
            return new ModelAndView(model, "sign-in.hbs");
        }, new HandlebarsTemplateEngine());


        get("/ideas", (req, res) -> {
            Map<String, Object> model = new HashMap<>();
            model.put("ideas", dao.findAll());
            return new ModelAndView(model, "ideas.hbs");
        }, new HandlebarsTemplateEngine());

        post("/ideas", (req, res) -> {
            String title = req.queryParams("title");
            // TODO:csd - This username is tied to the cookie implementation
            CourseIdea courseIdea = new CourseIdea(title,
                    req.cookie("username"));
            dao.add(courseIdea);
            res.redirect("/ideas");
            return null;
        });
    }
}

1 Answer

Yanuar Prakoso
Yanuar Prakoso
14,816 Points

Hi Ronald

You need to modify this part of your code:

post("/sign-in", (req, res) -> {
            Map<String, String> model = new HashMap<>();
            String username = req.queryParams("username");
            res.cookie("username", username);
            model.put("username", username);
            return new ModelAndView(model, "sign-in.hbs");
        }, new HandlebarsTemplateEngine());

The main point is to make this post /sign-in to be redirected to / (or main page) while retrieving String username from the req.cookie.

Also you do not need to render things, thus you don't need the HandlebarTemplateEngine since you will just redirect it to / page which already has HandlebarTemplateEngine renderer. Thus, all related to modelling and preparing for rendering also can be deleted:

  1. Map<String, String> model
  2. model.put
  3. return new ModelAndView This how the code should looks like:

    post("/sign-in", (req, res) -> {
    
            String username = req.cookie("username");
            res.cookie("username", username);// put username to cookie
            res.redirect("/");
            return null
        });
    

    I hope this can help. Please try it