获取 在 路径变量 中的空值



我在Spring中将值从 thymleaf 形式映射到我的控制器中的路径变量时遇到问题。

索引文件中的表单:

<!--/*@thymesVar id="fiatCurrency" type="java.lang.String"*/-->
<form 
th:action="@{'/values/' + ${fiatCurrency}}"  method="post"  >
<select name="fiatCurrency" onchange="this.form.submit()">
<option   th:value="USD" th:text="USD"> </option>
<option  th:value="EUR" th:text="EUR"> </option>
<option   th:value="CNY" th:text="CNY"> </option>
</select>
</form>

控制器如下所示:

@Controller
public class DataController {
private  ApiService apiService;
public DataController(ApiService apiService) {
this.apiService = apiService;
}
@GetMapping(value = {"/values","/values/","", "/", "/index","/cryptos"} )
public String index(Model model){
model.addAttribute("cryptos",apiService.getCrypto(100));
return "index";
}
@PostMapping(value = "/values/{fiatCurrency}")
public String choseCurrency(Model model,@PathVariable String fiatCurrency){
model.addAttribute("cryptos",apiService.getInDifferentValues(fiatCurrency));

return "index";
}
}

我的问题是它总是返回空值,我正在努力如何在PathVariablefiatCurrency绑定人民币、欧元美元的价值形成index.html形式。

问题是,您正在尝试在呈现页面后动态更改表单操作属性。这不能用百里香叶来完成,至少,按照你尝试的方式。请记住,Thymeleaf 在服务器端工作。因此,您有两种选择来实现此目的。

  • 不要使用路径变量,而是使用参数。
  • 使用 js 动态更改表单的操作。

最简单的当然是第一个选择。因此,您需要更改控制器中的后映射并更改参数的路径变量。

更改以下控制器方法。

@PostMapping(value = "/values/fiatCurrency")
public String choseCurrency(Model model,
@RequestParam("fiatCurrency") String fiatCurrency) {
model.addAttribute("cryptos", apiService.getInDifferentValues(fiatCurrency));
return "index";
}

你的html结尾看起来像这样。

<form id="fiatForm" th:action="@{/values/fiatCurrency}"  method="post">
<select id="fiatSelect" name="fiatCurrency">
<option th:value="USD" th:text="USD"> </option>
<option th:value="EUR" th:text="EUR"> </option>
<option th:value="CNY" th:text="CNY"> </option>
</select>
</form>

如果您不想添加按钮来提交表单,那么添加此jQuery函数就可以了。

$("#fiatSelect").on("change", function() {
$("#fiatForm").submit();
})

我已经尝试了这段代码,它已经在工作了。希望对您有所帮助。

我的案例的答案是我将PathVaribale更改为RequestBody并且可以工作。 我也尝试将其更改为RequestParam @alain-cruz,但它给了我上面提到的错误。

顺便说一句,它确实必须切断我得到的一点变量,因为我得到它是@RequestBody String="fiatCurrency=EUR所以我不得不摆脱 fiatCurrency=。

干杯

相关内容

  • 没有找到相关文章

最新更新