Java SpringMVC-如何在不同的控制器中使用或发送相同的对象?
问题解决了,谢谢各位;)我编辑了代码,查看底部 我是一个Spring新手,对于使用SpringMVC中通过不同控制器创建的对象,我有点困惑。我写了一个简单的项目,允许用户插入一些汽车的详细信息(品牌、型号和车牌号),并查看提交的记录列表(加上重置所有操作和选择性删除单个记录)。现在我也想编辑一个记录的值,但事情对我来说变得很困难 VeicoloController.javaJava SpringMVC-如何在不同的控制器中使用或发送相同的对象?,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,问题解决了,谢谢各位;)我编辑了代码,查看底部 我是一个Spring新手,对于使用SpringMVC中通过不同控制器创建的对象,我有点困惑。我写了一个简单的项目,允许用户插入一些汽车的详细信息(品牌、型号和车牌号),并查看提交的记录列表(加上重置所有操作和选择性删除单个记录)。现在我也想编辑一个记录的值,但事情对我来说变得很困难 VeicoloController.java @Controller @RequestMapping("/veicolo") @SessionA
@Controller
@RequestMapping("/veicolo")
@SessionAttributes("veicoli")
public class VeicoloController {
@Autowired VeicoloValidator veicoloValidator;
@GetMapping({"", "lista"})
public String lista() {
return "/veicolo/lista_veicoli";
}
@GetMapping("inserisci_veicolo")
public ModelAndView inserisci(){
return new ModelAndView("veicolo/inserisci_veicolo", "modelVeicolo", new Veicolo());
}
@PostMapping("save")
public ModelAndView salvaVeicolo(@ModelAttribute("modelVeicolo") Veicolo veicolo, BindingResult bindingResult,Model model)
{
System.out.println("Veicolo = " + veicolo);
veicoloValidator.validate(veicolo, bindingResult);
if (bindingResult.hasErrors()){
return new ModelAndView("veicolo/inserisci_veicolo");
}
else{
Set<Veicolo> veicoli;
if (!model.containsAttribute("veicoli")){
veicoli = new HashSet<>();
model.addAttribute("veicoli", veicoli);
}
else{
veicoli = (Set<Veicolo>) model.asMap().get("veicoli");
}
veicoli.add(veicolo);
return new ModelAndView("veicolo/lista_veicoli");
}
}
@控制器
@请求映射(“/VEICLO”)
@会期贡献(“维科利”)
公共类控制器{
@自动连线VeicoloValidator VeicoloValidator;
@GetMapping({“”“lista”})
公共字符串lista(){
return“/veicolo/lista_veicoli”;
}
@GetMapping(“inserisci_veicolo”)
公共模型和视图inserisci(){
返回新的ModelAndView(“Veiclo/inserisci_Veiclo”,“ModelVeiclo”,new Veiclo());
}
@后映射(“保存”)
公共模型和视图salvaVeicolo(@ModelAttribute(“modelVeicolo”)Veicolo Veicolo,BindingResult BindingResult,模型模型)
{
System.out.println(“VEICLO=“+VEICLO”);
验证(VEICLO,bindingResult);
if(bindingResult.hasErrors()){
返回新模型和视图(“Veiclo/inserisci_Veiclo”);
}
否则{
设静脉曲张;
如果(!model.containsAttribute(“veicoli”)){
Veicli=新的HashSet();
model.addAttribute(“VEICLI”,VEICLI);
}
否则{
veicoli=(Set)model.asMap().get(“veicoli”);
}
添加(VEICLO);
返回新模型和视图(“Veiclo/lista_veicoli”);
}
}
现在,这里是我的问题控制器:
我使用此控制器编辑行,使用车牌号作为唯一元素来检索特定的车辆对象,并通过jsp中的querystring传递它(稍后我将显示它)。这样,我可以在编辑表单中显示车辆属性(并隐藏无法修改的车牌号表单)
@GetMapping(“modifica”)
public Model和view modificaVeicolo(@RequestParam(“targa”)字符串targa,Model Model){
Set veicoli=(Set)model.asMap().get(“veicoli”);
VEICLO VEICLOMOD=null;
对于(Veicolo v:veicoli){
if(v.getTarga().equalsIgnoreCase(targa)){
veicoloMod=v;
打破
}
model.addAttribute(veicoloMod);
}
返回新模型和视图(“veicolo/modifica_veicolo”、“modelVeicolo”、“veicoloMod”);
}
这就是我试图更新控制器的方式,我真的不知道如何使用我在上一个控制器中得到的对象,它给了我(我想)我需要的所有汽车信息
@PostMapping("update")
public ModelAndView updateVeicolo(@ModelAttribute("modelVeicolo")Veicolo veicolo, BindingResult bindingResult,Model model)
{
// Veicolo veicoloToUpdate = (Veicolo)model.asMap().get("veicoli");
veicoloValidator.validate(veicolo, bindingResult);
if (bindingResult.hasErrors())
{
return new ModelAndView("veicolo/modifica_veicolo");
}
else
{
Set<Veicolo> veicoli =(Set<Veicolo>)model.asMap().get("veicoli");
veicoli.add(veicolo);
}
return new ModelAndView("veicolo/lista_veicoli");
}
@PostMapping(“更新”)
公共模型和视图更新图标(@ModelAttribute(“modelVeicolo”)Veicolo Veicolo,BindingResult BindingResult,模型模型)
{
//VEICLO VEICLOTOUPDATE=(VEICLO)model.asMap().get(“VEICLO”);
验证(VEICLO,bindingResult);
if(bindingResult.hasErrors())
{
返回新模型和视图(“Veiclo/modifica_Veiclo”);
}
其他的
{
Set veicoli=(Set)model.asMap().get(“veicoli”);
添加(VEICLO);
}
返回新模型和视图(“Veiclo/lista_veicoli”);
}
modifica\u veicolo.jsp
维科洛酒店
维科洛酒店
马卡
莫代洛
关键点::如果选择使用HashSet存储对象,则类必须重写equals和hashcode
1.Veicolo.java
重写Equalas和hashcode
2.VeicoloController.updateVeicolo()
通过删除和添加来更新对象
@PostMapping(“更新”)
公共模型和视图更新图标(@ModelAttribute(“modelVeicolo”)Veicolo Veicolo,BindingResult BindingResult,
(模型){
//VEICLO VEICLOTOUPDATE=(VEICLO)model.asMap().get(“VEICLO”);
验证(VEICLO,bindingResult);
if(bindingResult.hasErrors()){
返回新模型和视图(“Veiclo/modifica_Veiclo”);
}否则{
Set veicoli=(Set)model.asMap().get(“veicoli”);
if(veicoli.contains(veicolo)){
去除维科利(维科洛);
添加(VEICLO);
}
}
返回新模型和视图(“Veiclo/lista_veicoli”);
}
3.VeicoloController.modificaVeicolo()
将model.addAttribute移动到循环中
@GetMapping(“modifica”)
public Model和view modificaVeicolo(@RequestParam(“targa”)字符串targa,Model Model){
Set veicoli=(Set)model.asMap().get(“veicoli”);
VEICLO VEICLOMOD=null;
对于(Veicolo v:veicoli){
if(v.getTarga().equalsIgnoreCase(targa)){
veicoloMod=v;
model.addAttribute(veicoloMod);
@PostMapping("update")
public ModelAndView updateVeicolo(@ModelAttribute("modelVeicolo")Veicolo veicolo, BindingResult bindingResult,Model model)
{
// Veicolo veicoloToUpdate = (Veicolo)model.asMap().get("veicoli");
veicoloValidator.validate(veicolo, bindingResult);
if (bindingResult.hasErrors())
{
return new ModelAndView("veicolo/modifica_veicolo");
}
else
{
Set<Veicolo> veicoli =(Set<Veicolo>)model.asMap().get("veicoli");
veicoli.add(veicolo);
}
return new ModelAndView("veicolo/lista_veicoli");
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Veicolo veicolo = (Veicolo) o;
return targa.equals(veicolo.getTarga());
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + getTarga().hashCode();
return result;
}
@PostMapping("update")
public ModelAndView updateVeicolo(@ModelAttribute("modelVeicolo") Veicolo veicolo, BindingResult bindingResult,
Model model) {
// Veicolo veicoloToUpdate = (Veicolo)model.asMap().get("veicoli");
veicoloValidator.validate(veicolo, bindingResult);
if (bindingResult.hasErrors()) {
return new ModelAndView("veicolo/modifica_veicolo");
} else {
Set<Veicolo> veicoli = (Set<Veicolo>) model.asMap().get("veicoli");
if (veicoli.contains(veicolo)) {
veicoli.remove(veicolo);
veicoli.add(veicolo);
}
}
return new ModelAndView("veicolo/lista_veicoli");
}
@GetMapping("modifica")
public ModelAndView modificaVeicolo(@RequestParam("targa") String targa, Model model) {
Set<Veicolo> veicoli = (Set<Veicolo>) model.asMap().get("veicoli");
Veicolo veicoloMod = null;
for (Veicolo v : veicoli) {
if (v.getTarga().equalsIgnoreCase(targa)) {
veicoloMod = v;
model.addAttribute(veicoloMod);
break;
}
}
return new ModelAndView("veicolo/modifica_veicolo", "modelVeicolo", veicoloMod);
}