【问题标题】:Getting the selected Value from Drop Down Menu - Thymeleaf + Spring Boot从下拉菜单中获取选定的值 - Thymeleaf + Spring Boot
【发布时间】:2020-04-20 01:57:15
【问题描述】:

我想从 HTML 下拉菜单中获取选定的值。我确实填写了下拉菜单,但需要从“handlebar.html”中获取选定的值来填写我的下一个下拉菜单。如果你能告诉我如何获得价值会很好,我真的不在乎我是否必须使用 javascript 或其他什么。非常感谢您的帮助^^

HTML 代码:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head> 
    <title>Getting Started: Serving Web Content</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
     <form action="#" th:action="@{/schaltung}" th:object="${String}" method="post">
        <select class="form-control" id="handlebar" name="testOrder">
            <option value="">Select Type</option>
            <option th:each="test : ${type}"
                    th:value="${test}"
                    th:text="${test}">
            </option>
        </select>
        <a href="/schaltung">
            <button>Next Step</button>
        </a>
    </form>


    <a href="index.html">Zur Startseite</a>
</body>
</html>

我的 Java 控制器:

package com.example.servingwebcontent;

import org.apache.commons.collections4.MultiValuedMap;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;


import javax.validation.Valid;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

@Controller
public class WebController {

    @GetMapping("/greeting")
    public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "handlebar";
    }

    @GetMapping("/handlebar")
    public String handlebar(@RequestParam(name="name", required=false) String name, Model model) throws IOException {
        ProductsWeb productsWeb = new ProductsWeb();
        List<String> list = new ArrayList<String>();
        list=productsWeb.lenkertyp();
        model.addAttribute("type", list);
        return "handlebar";
    }

    @GetMapping("/schaltung")
    public String schaltung(@RequestParam(name="name", required=false) String name, Model model) throws IOException {
        ProductsWeb productsWeb = new ProductsWeb();
        List<String> list = new ArrayList<String>();
        list=productsWeb.schaltung("");
        model.addAttribute("type", list);
        return "schaltung";
    }



    @GetMapping("/griff")
    public String griff(@RequestParam(name="name", required=false) String name, Model model) throws IOException {
        ProductsWeb productsWeb = new ProductsWeb();
        List<String> list = new ArrayList<String>();
        list=productsWeb.griff("");
        model.addAttribute("type", list);
        return "griff";
    }

    @GetMapping("/material")
    public String material(@RequestParam(name="name", required=false) String name, Model model) throws IOException {
        ProductsWeb productsWeb = new ProductsWeb();
        List<String> list = new ArrayList<String>();
        list=productsWeb.material("");
        model.addAttribute("type", list);
        return "material";
    }

    /*String s12 =null;
    @PostMapping("/handlebar")
    public String addNewType(@ModelAttribute("type") @Valid @RequestBody String type, Model model) {


        model.addAttribute("type", type);

        s12=type;
        System.out.println(s12+"1213645");


        return s12;


    }*/





}

【问题讨论】:

  • 您在选择周围没有任何形式。您想向服务器发布请求,然后使用选定的值吗?你知道网页 HTML 表单是如何工作的吗?
  • 抱歉,为该类发布了错误的代码。我更新了,希望你现在可以帮助我
  • 你应该从阅读文档开始:thymeleaf.org/doc/tutorials/2.1/…
  • 我做到了,但我仍然卡住了

标签: java spring-boot thymeleaf


【解决方案1】:

您似乎希望您的按钮“下一步”将表单发布到 Java 控制器。就像现在一样,有一个带有 href 包裹按钮的锚标记,这与在 JavaScript 中执行 window.location='/schaltung' 基本相同(它正在更改浏览器 URL,但不发布表单)。

要在控制器中接收表单值,您需要提交表单。尝试从您的按钮周围删除&lt;a href&gt; 标签,并将按钮类型设置为“提交”,这样您的按钮看起来像:

<button type="submit">Next Step</button>

这应该提交您的表单并将选定的值发布到您的 Java 控制器中。

为了让您的控制器从表单接收参数,您需要将接收函数注释为:@PostMapping 或 @RequestMapping(在 POST 请求中接收 HTTP 正文的内容)。

在您的情况下,将 @GetMapping("/schaltung") 更改为 @PostMapping("/schaltung") 或 @RequestMapping("/schaltung")。

在函数“schaltung”中为“testOrder”添加一个RequestParam(被发布的选择标签的名称):

@RequestMapping("/schaltung")
public String schaltung(@RequestParam(name="name", required=false) String name, @RequestParam String testOrder, Model model) throws IOException {
    ProductsWeb productsWeb = new ProductsWeb();
    List<String> list = new ArrayList<String>();
    list=productsWeb.schaltung("");
    model.addAttribute("type", list);
    model.addAttribute("testOrder", testOrder);
    return "schaltung";
}

【讨论】:

  • 嗨,我试过了,得到一个“不支持请求方法'POST'”的错误。我还启用了我之前禁用的 Post Methode(你可以在我的代码末尾看到它)
  • 您是否将@GetMapping("/schaltung") 更改为@PostMapping("/schaltung") 或@RequestMapping("/schaltung")?
  • 我编辑了答案以包括对从 GetMapping 到 PostMapping 或 RequestMapping 的注释更改的解释。
  • 谢谢,错误已经消失,但我仍然不知道如何获取或使用发送的值
  • 在您的控制器中,您可以为要访问的值添加 RequestParam。 baeldung.com/spring-request-param
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 2017-10-06
  • 1970-01-01
  • 2019-05-23
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多