如何在控制器中返回错误消息而不是在Spring MVC中返回modelAndView

dluptydi  于 2023-01-26  发布在  Spring
关注(0)|答案(2)|浏览(198)

我从一个列表页传递一个id到控制器中,在那里它被处理,结果在model.addObject()中设置。
另外,我在新的ModelAndView("viewName")中设置视图,所以新的数据显示在新的jsp中。现在我添加了一个逻辑,如果从列表页面传递的id与会话中的userId相同,我需要在同一列表页面上显示错误消息“You cannot do this as user selected is yourslef”,而不是显示包含新数据的新页面。
这是我的方法语法。

public ModelAndView showdetails(@RequestParam ("userLogin") UserLogin userLogin){....

    return modelAndView;
    }

请提出一个做这件事的方法.

syqv5f0l

syqv5f0l1#

当这个方法返回视图时,您可以像这样将对象Map到它,

public ModelAndView showdetails(@RequestParam ("userLogin") UserLogin userLogin){....

    // Verify your session here   
    if (session.getAttribute("name").equals("name")
{
 string vale = "You cannot do this as the user selected is yourslef"    
 return modelAndView("viewname","value",value);
    }

在你的jsp中
使用EL打印它,

${value}

希望对你有帮助!!

fcg9iug3

fcg9iug32#

这是通过JS完成的。并且你的控制器方法应该返回ResponseEntity〈Map〈String,String〉〉。当你从一个列表页面中选择一个用户时,在onchange()事件的函数中,你通过 AJAX (XMLHttpRequest)发送请求,你会得到responseText并在JSON上解析它。然后你会得到消息并修改你文档的一些内容来显示它。

public ResponseEntity<Map<String,String>> showdetails(@RequestParam("userLogin") UserLogin userLogin){
    Map<String,String> resp = new HashMap<>();
    if (session.getAttribute("name").equals("name")){
        resp.put("message","You cannot do this as the user selected is yourslef");
    }
    return ResponseEntity.status(HttpStatus.OK).body(resp);
}

那么你的JS应该是:

function checkUser(userId){
    const Http = new XMLHttpRequest();
    const url="https://your.domain.com/...";

        Http.onreadystatechange = (e) => {
            if (Http.readyState===Http.DONE && Http.responseText!=""){
                var json = JSON.parse(Http.responseText);
                document.getElementById("msgElement").value=json['message'];
            }
        }

        Http.onerror = () => alert("Request failed");

    Http.open("GET", url);
    Http.send();
}

相关问题