BigAl1992
BigAl1992

Reputation: 67

Spring MVC form submission, populate on the same page

I am trying to create a simple function using a post method. What I want is whatever is entered in the form and submitted- it should appear on the same page below the form. However the text just disappears once I click "submit". Here is my code

Contoller

@Controller

public class SearchController {



@RequestMapping(value = "/search", method = RequestMethod.GET)
public String goToSearch(Model model) {

    model.addAttribute("item", new Item());

    return "itemsearch";

}

@RequestMapping(value = "/search", method = RequestMethod.POST)
public String search(Item item, Model model, @RequestParam String itemId) throws IOException{

    model.addAttribute("item", new Item());



    return "itemsearch";

}
}

Jsp file

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<h2>Search for an item</h2>

<sf:form action="search" method="POST" modelAttribute="item">

          <label>Please enter the item Id number:<sf:input type="text"     name="itemId"  id="itemId" path="itemId" /></label><br/>

          <input type="submit" value="Submit" path="submit" />

          <br> You are trying to search for Id Number: <b><h3>${item.itemId}<h3></h3></b> 

</sf:form>

Item class

public class Item {

private String itemId;

private List<String> itemDetails;


public List<String> getItemDetails() {
    return itemDetails;
}

public void setItemDetails(List<String> itemDetails) {
    this.itemDetails = itemDetails;
}

public String getItemId() {
    return itemId;
}

public void setItemId(String itemId) {
    this.itemId = itemId;
}



}

Many thanks

Upvotes: 0

Views: 2699

Answers (1)

smsnheck
smsnheck

Reputation: 1593

I think you need a basic understanding how Spring MVC works.

Have a look at this picture:

enter image description here

You see an incoming request (your POST request) from the client which is redirected to the desired controller. The controller (your SearchController) makes some business magic and returns the model to the front controller. The model is by default empty. You can add objects that should be rendered via model.addAttribute("someId", someObject); The passed model is now handled by the view template (itemsearch) which connects the template and the model to a (static) response that is passed to the client.

And there is the problem. You are passing in your controller new Item() to the model. It is an empty object which has no values (and no id which you want to render after the form submition). Therefore on your JSP page could be nothing displayed. Just pass the found item or the item from your request to the model.

Upvotes: 1

Related Questions