user2854201
user2854201

Reputation:

in spring3 mvc how to display single value in different jsp pages

    Welcome.jsp page
    <a href="addStudent">Click here for registration form</a>

    student.jsp is the registration page

    <s:form method="post" action="addStudent" commandName="student">

    <s:label path="name">NAME:</s:label>
    <s:input path="name"/><br>
    <font color="red"><s:errors path="name"></s:errors></font><br>

    result.jsp

    <table>
    <tr>
    <td><font color="red">NAME:</font></td>
    <td><font color="blue">${student.name}</font></td>
    </tr></table>

    studentmoredetails.jsp

    <s:form method="POST" action="studentadditionaldetails" commandName="studentMoreDetails">
    <s:label path="fullname">FULLNAME:</s:label>
    <s:input path="fullname"/>

    final result.jsp

    <table>
    <tr>
    <td><font color="red">NAME:</font></td>
    <td><font color="blue">${name}</font></td>
    </tr>

    <tr>
    <td><font color="red">FULLNAME:</font></td>
    <td><font color="blue">${studentMoreDetails.fullname}</font></td>
    </tr></table>

    I am having 2 controller class and two bean class

    RegistrationController.java

    @Controller
    @RequestMapping("addStudent")
    public class RegistrationController {
        Student studentobj=new Student();
        @RequestMapping(method=RequestMethod.GET)
        public String toRegform(ModelMap model)
        {                   
            model.addAttribute("student", studentobj);      
            return "student";
        }

        @RequestMapping(method = RequestMethod.POST)
        public String addStudent(@Valid Student login, BindingResult result,ModelMap model) 
        {           
            if (result.hasErrors()) {
                return "student";
            }

            login = (Student) model.get("student");
            if ((login.getName()==null))
            {
                return "student";
            }
        //  model.put("student", login);        
            return "result";        
        }       

    Student.java (bean class)
    private int age;
        @NotEmpty
        @Size(min=3,max=15)
        private String name;    
    // getters and setters

    AdditionaldetailsController.java
    @Controller
    @RequestMapping("studentadditionaldetails")
    public class AdditionalDetailsConroller {
        @RequestMapping(method=RequestMethod.GET)
        public String additionalForl(ModelMap model1)
        {       
            StudentMoreDetails additional=new StudentMoreDetails();
            model1.addAttribute("studentMoreDetails", additional);
            return "studentmoredetails";
        }
        @RequestMapping(method=RequestMethod.POST)  
        public String additionalDetails(@Valid StudentMoreDetails login,BindingResult result,ModelMap model1)
        {       
            if (result.hasErrors()) 
            {
                return "studentmoredetails";
            }
            login=(StudentMoreDetails) model1.get("studentMoreDetails");        
            if (login.getFullname()==null)
            {
                return "studentmoredetails";
            }
            else
            {
                return "finalresult";
            }
        }
    }
     StudentMoreDetails.java(bean class)
    private String fullname;
    //getters and setters

    web.xml file 

    <servlet>
        <servlet-name>springdispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>

      <servlet-mapping>
        <servlet-name>springdispatcher</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>

    springdispatcher-servlet.xml file is
    <mvc:annotation-driven/>
    <context:component-scan base-package="org.pratap.javashades.controllers"></context:component-scan>

    <bean id="viewResolver"

            class="org.springframework.web.servlet.view.InternalResourceViewResolver">

            <property name="prefix" value="/WEB-INF/JSP/"></property>

            <property name="suffix" value=".jsp"></property>
    </bean>

    <bean id="messageSource"

            class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

            <property name="basename" value="/WEB-INF/messages" />

    </bean>     

    </beans>

    i am displaying both name and fullname values in the finalresult.jsp, but only fullname value i am getting, name value is empty in finalresult.jsp. please help me how can i display both the values in finalresult.jsp page. Please tell me how to achieve sesion for above??

i am displaying both name and fullname values in the finalresult.jsp, but only fullname value i am getting, name value is empty in finalresult.jsp. please help me how can i display both the values in finalresult.jsp page. Please tell me how to achieve sesion for above?? Thanks in advance Hope somebody will guide me soon

Upvotes: 0

Views: 834

Answers (2)

Pratap A.K
Pratap A.K

Reputation: 4517

add these lines to your controller class

@SessionAttributes({"student"})
public class RegistrationController {
.
.
.
}

@SessionAttributes({"student"})
public class AdditionalDetailsConroller {

@RequestMapping(method=RequestMethod.POST)  
    public String additionalDetails(@Valid StudentMoreDetails login,BindingResult result,ModelMap model1,@ModelAttribute Student student)
    {   
        System.out.println("stu"+student.getName());
        if (result.hasErrors()) 
        {
            return "studentmoredetails";
        }
        login=(StudentMoreDetails) model1.get("studentMoreDetails");        
        if (login.getFullname()==null)
        {
            return "studentmoredetails";
        }
        else
        {
            return "finalresult";
        }
    }   
}

finalresult.jsp will be
<table>
<tr>
<td><font color="red">NAME:</font></td>
<td><font color="blue">${student.name}</font></td>
</tr>

<tr>
<td><font color="red">FULLNAME:</font></td>
<td><font color="blue">${studentMoreDetails.fullname}</font></td>
</tr>
</table>

Upvotes: 0

Will Keeling
Will Keeling

Reputation: 22994

The finalResult.jsp is looking for an attribute called name, but there is no attribute called name available in the request at that point.

If you want to pass the name that was captured by the first controller RegistrationController to the second controller AdditionalDetailsController then it may be easiest just to use the session for this.

RegistrationController

    @RequestMapping(method = RequestMethod.POST)
    public String addStudent(HttpSession session, @Valid Student login, BindingResult result,ModelMap model) 
    {           
        if (result.hasErrors()) {
            return "student";
        }

        login = (Student) model.get("student");
        if ((login.getName()==null))
        {
            return "student";
        }

        session.setAttribute("student", login); // Set the Student in session

    //  model.put("student", login);        
        return "result";        
    }       

Then in finalResult.jsp you should be able to access the Student directly from the session:

finalResult.jsp

<table>
<tr>
<td><font color="red">NAME:</font></td>
<td><font color="blue">${sessionScope.student.name}</font></td>
</tr>

<tr>
<td><font color="red">FULLNAME:</font></td>
<td><font color="blue">${studentMoreDetails.fullname}</font></td>
</tr></table>

As a side note - you should not store the Student in an instance field in RegistrationController due to the multi-threaded nature of controllers. This should be created locally within the method.

    @RequestMapping(method=RequestMethod.GET)
    public String toRegform(ModelMap model)
    {                   
        model.addAttribute("student", new Student()); // Create student
        return "student";
    }

Upvotes: 2

Related Questions