Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC-如何在不同的控制器中使用或发送相同的对象?_Java_Spring_Jsp_Spring Mvc - Fatal编程技术网

Java SpringMVC-如何在不同的控制器中使用或发送相同的对象?

Java SpringMVC-如何在不同的控制器中使用或发送相同的对象?,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,问题解决了,谢谢各位;)我编辑了代码,查看底部 我是一个Spring新手,对于使用SpringMVC中通过不同控制器创建的对象,我有点困惑。我写了一个简单的项目,允许用户插入一些汽车的详细信息(品牌、型号和车牌号),并查看提交的记录列表(加上重置所有操作和选择性删除单个记录)。现在我也想编辑一个记录的值,但事情对我来说变得很困难 VeicoloController.java @Controller @RequestMapping("/veicolo") @SessionA

问题解决了,谢谢各位;)我编辑了代码,查看底部

我是一个Spring新手,对于使用SpringMVC中通过不同控制器创建的对象,我有点困惑。我写了一个简单的项目,允许用户插入一些汽车的详细信息(品牌、型号和车牌号),并查看提交的记录列表(加上重置所有操作和选择性删除单个记录)。现在我也想编辑一个记录的值,但事情对我来说变得很困难

VeicoloController.java

    @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);
}