我正在尝试在更改选项后将我的Thymeleaf超文本标记语言中已经提供的List传回控制器。我尝试过隐藏输入,但不幸的是,它还不起作用。
我的表单如下所示(控制器已经提供了“电影”列表)
<form action="/movies" method="POST">
<input type="hidden" th:field="*{movies}" name="movies"/>
<select name="myselect" id="myselect" onchange="this.form.submit()">
<option value="1">Sort by Name (A-Z)</option>
<option value="2">Sort by Name (Z-A)</option>
<option value="3">Newest First</option>
<option value="4">Oldest First</option>
</select>
</form>
我的控制器看起来像这样:
package at.spengergasse.omdbspring.controller;
import at.spengergasse.omdbspring.domain.Movie;
import at.spengergasse.omdbspring.service.MovieService;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@RequiredArgsConstructor
@Controller
public class MoviesController {
private final MovieService movieService;
@GetMapping("/")
public String greeting(Model model) {
model.addAttribute("movies", movieService.findAll());
return "movies";
}
@PostMapping("/movies")
public String getMoviesOrdered(@RequestAttribute List<Movie> movies, @RequestParam String myselect, Model model){
model.addAttribute(movieService.findCustomListSorted(movies,myselect));
return "movies";
}
}
期待有人能帮助我!
如果我正确理解了你的问题,你想在单击选择字段时调用电影列表,并将电影添加到某个div?这可以通过对控制器的AJAX调用来实现,因此在完成后,它将用内容填充div,如果这样做有意义的话:
function getMoviesOrdered(myselect){
var prep = {};
prep['movies'] = myselect;
var data = JSON.stringify(prep);
$.ajax({
url:"/movies",
type:"POST",
data:data,
contentType:"application/json; charset=utf-8",
dataType:"json",
error:function(){},
complete:function(data){
document.getElementById("#someDivId").innerHTML = data;
}
});
}
由于您的电影列表是通过您的表单发送的,因此它将在HTTP POST正文中提供。因此,您必须使用@RequestBody
而不是@RequestAttribute
。
@PostMapping("/movies")
public String getMoviesOrdered(@RequestBody List<Movie> movies, @RequestParam String myselect, Model model){
model.addAttribute(movieService.findCustomListSorted(movies,myselect));
return "movies";
}
我在我的项目中遇到了同样的问题,其中隐藏列表值已经由控制器提供,然后需要将相同的值进一步传递给控制器。我已经使用@modeldattribute注释解决了这个问题(我正在根据您的要求粘贴相同的代码):---
1)在要发送电影的控制器上创建表单对象(表单提交后需要进一步发送到控制器):-
model.addAttribute("some_value", new YourDesiredJavaClass());
2)在表单上创建同名的Thymeleaf对象,在本例中为“some_value”:--
<form action="/movies" th:object="${some_value}" method="POST">
<input th:field="${movies}" type="hidden" ></input>
</form>
3)从Thymleaf获取列表到控制器:--
@PostMapping("movies")
public String getMovies(@ModelAttribute("some_value") YourDesiredJavaClass requestClass, Model model) {
//进一步的代码...
}
4.)使用setter创建Request类
public class YourDesiredJavaClass{
private List<String> movies;
//setter & getter methods
}
给定以下代码: 和一个jsp: 如何将在下拉列表中选择的值传递回Spring控制器?目前,当我尝试执行此操作时,得到的请求参数无效。
我正在尝试将一个对象(或只是ID)传递给我的控制器,我从下拉列表中选择它。有2个类:产品和类别(产品包含一个外键,这是类别的ID)这是我如何将其加载到: 如您所见,我正在将对象类别传递到我的. jsp中。在那里我显示了用户可以选择的所有类别。 该值应该传递给我的控制器,但我不知道如何传递它。
我想通过使用javascript或jquery或不使用javascript或jquery将thymeleaf下拉选择的值传递给spring boot控制器
如果对象为NULL,则无法传递对象项目。如何将对象从HTML传递给spring控制器?
我正在javascript上对消息进行加密和解密,并希望将结果消息发送到Spring控制器mvc。 因此,令牌应该保存来自javascript的值。我没有使用jquery。如何将javascript中的值传递给Spring mvc控制器。 我想在java控制器类中使用这个变量(即encryptedFinally)。
因此,在我的Javascript中,我使用的是表单序列化,输出是正确的 (issubmit=1) 当我试图将其传递给我的控制器时,我什么也得不到,。我做错了什么? Jquery: 控制器: