0

I am new in spring and stackoverflow. I have a situation as follows: I clicked a button at index page which mapped to a controller class, I reached there but further mapping is not working as controller is not redirecting to desired view or jsp file further.

Here is my controller class

import java.util.List;
import model.Emp;
import model.EmpDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class EmpController {

@Autowired
EmpDao dao;//will inject dao from xml file  

/*It displays a form to input data, here "command" is a reserved request 
attribute 
 *which is used to display object data into form 
 */
@RequestMapping("/empform")
public ModelAndView showform() {
    return new ModelAndView("redirect:/empform", "command", new Emp());
}

/*It saves object into database. The @ModelAttribute puts request data 
 *  into model object. You need to mention RequestMethod.POST method  
 *  because default request is GET*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute("emp") Emp emp) {
    dao.save(emp);
    return new ModelAndView("redirect:/viewemp");//will redirect to viewemp request mapping  
}

/* It provides list of employees in model object */
@RequestMapping("/viewemp")
public ModelAndView viewemp() {
    List<Emp> list = dao.getEmployees();

    return new ModelAndView("redirect:/viewemp", "list", list);
}

/* It displays object data into form for the given id.  
 * The @PathVariable puts URL data into variable.*/
@RequestMapping(value = "/editemp/{id}")
public ModelAndView edit(@PathVariable int id) {
    Emp emp = dao.getEmpById(id);
    return new ModelAndView("empeditform", "command", emp);
}

/* It updates model object. */
@RequestMapping(value = "/editsave", method = RequestMethod.POST)
public ModelAndView editsave(@ModelAttribute("emp") Emp emp) {
    dao.update(emp);
    return new ModelAndView("redirect:/viewemp");
}

/* It deletes record for the given id in URL and redirects to /viewemp */
@RequestMapping(value = "/deleteemp/{id}", method = RequestMethod.GET)
public ModelAndView delete(@PathVariable int id) {
    dao.delete(id);
    return new ModelAndView("redirect:/viewemp");
}}

I have checked many questions related this problem but unfortunately nothing worked. please help.

dispatcher-servlet.xml

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMap
 ping"/>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.htm">indexController</prop>
            </props>
        </property>
    </bean>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <bean name="indexController" class="org.springframework.web.servlet.mvc.ParameterizableViewController"
          p:viewName="index" />

applicationContext.xml

<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
    <property name="url" value="jdbc:mysql://localhost:3306/demoDB"></property>  
    <property name="username" value="root"></property>  
    <property name="password" value="password"></property>  
</bean>  

<bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">  
    <property name="dataSource" ref="ds"></property>  
</bean>  

<bean id="dao" class="model.EmpDao">  
    <property name="template" ref="jt"></property>  
</bean>

Project Tree:

Project Tree

RubioRic
  • 2,442
  • 4
  • 28
  • 35

1 Answers1

1

I think that you are trying to redirect to viewemp page in your @Controller. It will redirect again and again to the same URL. Instead of doing redirect, give a View name

/* It provides list of employees in model object */
@RequestMapping("/viewemp")
public ModelAndView viewemp() {
      List<Emp> list = dao.getEmployees();

      return new ModelAndView("viewemp", "list", list);
}
Kalaiselvan
  • 2,095
  • 1
  • 18
  • 31
  • That's not how Spring MVC works https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html Controller pass ModelAndView to FrontController (DispatcherServlet) and the view is rendered, the request is not being returned to the Controller again and again. You can check a simple HelloWorld controller here https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-controller – RubioRic May 29 '17 at 09:25
  • Yeh! your correct #RubioRic, for rendering view we need to specify view name! – Kalaiselvan May 29 '17 at 09:34
  • I think that you're right with the redirect prefix. https://stackoverflow.com/questions/17218856/redirect-from-one-controller-method-to-another-controller-method – RubioRic May 29 '17 at 13:06