java—如何将表单中的变量提交给要附加到url的控制器

rxztt3cl  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(231)

我在thymleaf的表单中有一个变量,这个变量是一个日期,必须嵌入到控制器中的一个方法中,该方法将显示特定日期的数据。我的问题是,当变量被选中并提交时,我会在我的url中得到一个奇怪的链接,就像这样localhost:8080/masomo/somo/?date=11-03-2021&date=date 对那一页没有任何回应。提交变量时我做错了什么。
以下是masomo.html中的表单

<form th:action="@{/masomo/somo/}">
                <select id="date" name="date" required="true">
                <option value="none" selected disabled hidden > 
                    Select a Date 
                </option> 

                <th:block th:each="somoChagua : ${masomoChagua}">
                 <option th:each="date : ${somoChagua.date}"  th:value="${date}" th:text="${date}" ></option>
                </th:block>
                </select>

                <button type="submit" th:name="date" th:value="date" ><i class="fa fa-search"></i> </button> 

            </form>

下面是我如何在controller中设置方法来接收变量

@Autowired
  private MisaleRepository misaleRepository;

  @RequestMapping(value = "/masomo/somo/{date}", method=RequestMethod.GET  )
  public String chaguaSomo(@RequestParam(value = "date", required = true) String date, Model model  ){

    List<Misale> masomo = misaleRepository.getSomoBytarehe(date);
    model.addAttribute("masomoYote", masomo);

    return "masomo";

}

这是我的存储库

public interface MisaleRepository extends JpaRepository <Misale, String> {

     @Query(value ="SELECT * FROM misale WHERE misale.date = ?1 " , nativeQuery = true)
    public List<Misale> getSomoBytarehe(String date);

}
nwnhqdif

nwnhqdif1#

删除 th:name 以及 th:value 在submit按钮行中

<button type="submit" ><i class="fa fa-search"></i> </button>

日期值作为请求参数从视图传递给控制器,但控制器将其作为路径变量接收。

@RequestMapping(value = "/masomo/somo/", method=RequestMethod.GET  )
  public String chaguaSomo(@RequestParam(value = "date", required = true) String date, Model model  )
pftdvrlh

pftdvrlh2#

我不得不改变我的形式如下

<form th:action="@{'/masomo/somo/' + ${date}}">

我把按钮改成

<button type="submit"><i class="fa fa-search"></i> </button>

我还将controller中的方法更改为

@GetMapping("/masomo/somo/{date}")
     public String chaguaSomo(@RequestParam(value = "date",required = true) String date, Model model ){......}

在上述更改之后,我现在可以将数据从块th:each中的窗体传递到控制器

相关问题