当前位置: 首页 > 知识库问答 >
问题:

如何在Spring MVC中访问来自同一控制器中不同JSP页面上的表单的值?

章松
2023-03-14
<body>

  <div class="container">

    <div>
      <h1>Spring Boot Web JSP Example</h1>
      <h2>Name: ${book.name}</h2>
      <h2>Author: ${book.author}</h2>
      <h2>ISBN: ${book.isbn}</h2>
    </div>

  </div>

  <form:form method="POST" action="/get" modelAttribute="newBook">
    <div class="form-group">
      <label for="authorInput">Author</label>
      <form:input path="author" cssClass="form-control" id="authorInput"></form:input>
    </div>
    <div class="form-group">
      <label for="dateInput">Date</label>
      <form:input path="date" cssClass="form-control" id="dateInput"></form:input>
    </div>
    <button type="submit" class="btn btn-primary">Get Book</button>
  </form:form>
  <a href="../add.jsp"><button type="submit" class="btn btn-primary">Add Book</button></a>
  <a href="../update.jsp"><button type="submit" class="btn btn-primary">Update Book</button></a>
</body>

下面是controller类:

@Controller公共类MainController{

@GetMapping(value = "/")
public String welcome(Map<String, Object> model) {
    model.put("newBook", new Book());
    model.put("updateBook", new Book());
    model.put("addBook",new Book());
    return "home";
}

@PostMapping(value = "/get")
public String change(@RequestParam("author") String author, Model model,
                     @ModelAttribute("newBook")Book book) {
    System.out.println(author);
    Book b = BookDao.getBook(book.getAuthor(), book.getDate());
    if(b == null){
        return "home";
    }
    model.addAttribute("book", b);
    model.addAttribute("newBook", new Book());
    return "home";
}
@RequestMapping(value = "/add")
public String addBook(@RequestParam("author") String author, @RequestParam("isbn") int isbn, Model model,
                      @ModelAttribute("addBook") Book book){
    System.out.println("Author: "+author + " ISBN: "+isbn);
    model.addAttribute("addBook", new Book());
    Book b= new Book(book.getName(), author,isbn, book.getDate());
    model.addAttribute("add", book);
    boolean result = BookDao.addBook(b);
    if(result)
        return "home";
    else
        return "error";
}
@RequestMapping( value = "/update")
public String updateBook(@RequestParam("author") String author, @RequestParam("isbn") int isbn, Model model,
                         @ModelAttribute("updateBook") Book book){
    System.out.println("Author: "+author + " ISBN: "+isbn);
    Book b= new Book(book.getName(), author,isbn, book.getDate());
    model.addAttribute("updateBook", new Book());
    model.addAttribute("update",b);
    BookDao.updateBook(isbn, b);
    return "home";
}

}

<body>

<h1>Add a Book</h1>

<form:form method="POST" action="/add" modelAttribute="addBook">
        <div class="form-group">
            <label for="nameInput">Name</label>
            <form:input path="name" cssClass="form-control" id="nameInput"></form:input>
        </div>
    <div class="form-group">
        <label for="authorInput">Author</label>
        <form:input path="author" cssClass="form-control" id="authorInput"></form:input>
    </div>
    <div class="form-group">
        <label for="isbnInput">ISBN</label>
        <form:input path="isbn" cssClass="form-control" id="isbnInput"></form:input>
    </div>
    <div class="form-group">
        <label for="dateInput">Date</label>
        <form:input path="date" cssClass="form-control" id="dateInput"></form:input>
    </div>

    <button type="submit" class="btn btn-primary">Add</button>
</form:form>


</body>
<body>
<form:form method="POST" action="/update" modelAttribute="third">
    <div class="form-group">
        <label for="authorInput">ISBN</label>
        <form:input path="isbn" cssClass="form-control" id="authorInput"></form:input>
    </div>
    <div class="form-group">
        <label for="nameInput">Name</label>
        <form:input path="name" cssClass="form-control" id="nameInput"></form:input>
    </div>
    <div class="form-group">
        <label for="authorInput">Author</label>
        <form:input path="author" cssClass="form-control" id="authorInput"></form:input>
    </div>
    <div class="form-group">
        <label for="dateInput">Date</label>
        <form:input path="date" cssClass="form-control" id="dateInput"></form:input>
    </div>
    <button type="submit" class="btn btn-primary">Update Book</button>
</form:form>
</body>

共有1个答案

荀嘉熙
2023-03-14

既然我找到了答案,我就把它贴出来,以防万一被别人卡住了。为了访问另一个JSP页面上的表单,我们不能只是直接重定向到MVC设计中的页面。为此,我们需要为每个JSP表单@PostMapping注释创建一个@GetMapping注释方法,然后首先重定向到@GetMapping方法,@GetMapping将重定向到JSP页面。应该这样做:

控制器类:

@Controller公共类MainController{

@GetMapping(value = "/")
public String welcome(Map<String, Object> model) {
    model.put("newBook", new Book());
    return "home";
}

@PostMapping(value = "/get")
public String change(@RequestParam("author") String author, Model model,
                     @ModelAttribute("newBook")Book book) {
    System.out.println(author);
    Book b = BookDao.getBook(book.getAuthor(), book.getDate());
    if(b == null){
        return "home";
    }
    model.addAttribute("book", b);
    model.addAttribute("newBook", new Book());
    return "home";
}

@GetMapping("/add")
public String show(Model model) {
    model.addAttribute("addBook", new Book());
    return "add";
}

@PostMapping(value = "/add")
public String addBook(@RequestParam("author") String author, @RequestParam("isbn") int isbn, Model model,
                      @ModelAttribute("addBook") Book book){
    System.out.println("Author: "+author + " ISBN: "+isbn);
    model.addAttribute("addBook", new Book());
    Book b= new Book(book.getName(), author,isbn, book.getDate());
    model.addAttribute("add", book);
    boolean result = BookDao.addBook(b);
    if(result)
        return "home";
    else
        return "error";
}

@GetMapping("/update")
public String showUpdate(Model model) {
    model.addAttribute("updateBook", new Book());
    return "update";
}

@PostMapping( value = "/update")
public String updateBook(@RequestParam("author") String author, @RequestParam("isbn") int isbn, Model model,
                         @ModelAttribute("updateBook") Book book){
    System.out.println("Author: "+author + " ISBN: "+isbn);
    Book b= new Book(book.getName(), author,isbn, book.getDate());
    model.addAttribute("updateBook", new Book());
    model.addAttribute("update",b);
    BookDao.updateBook(isbn, b);
    return "home";
}
html prettyprint-override"><form:form method="POST" action="/get" modelAttribute="newBook">
    <div class="form-group">
        <label for="authorInput">Author</label>
        <form:input path="author" cssClass="form-control" id="authorInput"></form:input>
    </div>
    <div class="form-group">
        <label for="dateInput">Date</label>
        <form:input path="date" cssClass="form-control" id="dateInput"></form:input>
    </div>
    <button type="submit" class="btn btn-primary">Get Book</button>
</form:form>
<a  href ="/add"><button type="submit" class="btn btn-primary">Add Book</button></a>
<a  href ="/update"><button type="submit" class="btn btn-primary">Update Book</button></a>
</body>
 类似资料:
  • Evere:路径为[/EmployeeRegistrationForm]的上下文中servlet[dispatcher]的servlet.Service()引发异常[请求处理失败;嵌套异常为org.springframework.web.bind.annotation.support.handlerMethodInvocationException:未能调用处理程序方法[public java.u

  • 类:DbUserController.cs txtUrl=性能页。fxml TextField c.txtUrl。setText(“测试”); 我指的代码不起作用。 它不会将“TEST TEST”写入TextBox。

  • 问题内容: 我想将注册和登录表格都放在同一页面上。 它们都以: 所以,我需要这样的东西: 还有如何在第二个表格繁忙时防止执行第一个表格,反之亦然(用户单击两者) 我的想法是在启动流程时(例如,在流程结束时)创建一个简单变量,因此: 可能有更好的方法。 问题答案: 您可以通过两种不同的动作制作两种形式 还是这样做 然后,您的PHP文件将用作一个switch($ _ POST [‘action’])…

  • 两个不同的帖子请求映射在同一个页面或URL上。我试图让一个按钮的帖子请求做一些事情,让另一个提交按钮做一些不同的事情 我尝试使用if(action.equals(“b1”))在控制器中命名表单和if语句 我尝试了两个单独的控制器来处理每个提交按钮 Java 语言(一种计算机语言,尤用于创建网站) 我正在设置一个页面,您可以在其中批准一个名为SEO或合作伙伴的对象的实例。然后,当您单击批准并继续时,

  • 问题内容: 我公司购买了一种在页面上呈现ASP.NET控件的产品。该控件使用jQuery 1.2.3并将脚本标记添加到页面以引用它。如果控件以任何方式修改(包括修改以引用其他版本的jQuery),则控件的开发人员将不支持使用该控件。 我将要开始开发自己的控件,并希望使用jQuery 1.3的功能和速度改进。这两个控件都需要存在于同一页面上。 如何允许购买的控件使用jQuery 1.2.3和新的自定

  • 我正在使用Spring形式。我只需要得到Staemap作为响应,但我得到的是整个jsp页面作为响应。