Java Spring-如何在视图之间传递消息?
我有一个显示、编辑和删除帐户的应用程序Java Spring-如何在视图之间传递消息?,java,spring,controller,Java,Spring,Controller,我有一个显示、编辑和删除帐户的应用程序 Display使用displayAccounts.jsp,由/accountsurl调用 Edit使用editAccount.jsp,由/accounts/{id}/Edit调用,其中id是要编辑的帐户的主键 Delete没有自己的视图,只调用控制器中的@RequestMapping方法,由/accounts/{id}/Delete 成功后,每个操作都会重定向到显示页面 成功执行操作(编辑/删除)后,我想发送一条可显示在显示页面上的成功消息。我怎样才能做到
displayAccounts.jsp
,由/accounts
url调用editAccount.jsp
,由/accounts/{id}/Edit
调用,其中id
是要编辑的帐户的主键@RequestMapping
方法,由/accounts/{id}/Delete
请帮忙。提前感谢。在这种情况下,您可以使用AJAX。使用此功能,您可以将操作从同一页面发送到控制器进行删除操作,并从同一页面上的控制器获取消息,以显示控制器删除操作的成功/错误消息。如果您的编辑操作打开了不同的视图,然后,您可以使用以下命令将消息从控制器传递到视图
ModelAndView mav = new ModelAndView();
然后将消息对象设置为
mav.addObject("message", "EDIT sucessfully completed");
最后,设置视图名称
mav.setViewName("views/afterEditOperation/");
如果您想传递一些消息(错误/成功)以显示来自控制器的页面,而不是下面的代码帮助,您可以直接在视图中使用消息作为${mesasage}
@Controller
@RequestMapping("/controllerPath")
public class editDeleteController {
@RequestMapping(method = RequestMethod.GET)
public String methodName(ModelMap model) {
model.addAttribute("message", "Message1");
model.addAttribute("moremessage", "Message2");
return "viewName";//veiwName here in your case it is displayPage
}
}
在显示页面中,您将通过
<h1>Message : ${message}</h1>
将控制器链接到displayPage控制器,以便显示刷新的数据。试试这个,希望它的工作Spring提供ModelMap类型的对象,你可以把你的数据放在ModelMap类型的对象中。这个对象可以在整个应用程序中访问。在这里,您可以放置一个字符串类型变量,该变量的值可以是Success,也可以是Failure(基于条件)。稍后,您可以从jsp页面访问此模型对象。以下是示例
@RequestMapping(value="/accounts/{id}/edit ")
// public String yourMethod(ModelMap model)
public String yourMethod(HttpServletRequest request,
HttpServletResponse response,ModelMap model){
if(someCondition){
String result = "Success";
model.addAttribute("result", result);
}
else{
String result="failure";
model.addAttribute("result", result);
}
// return "displayAccounts";
return new YourControllerClass().yourMethodforAccountDisplay(request, response,model);//this is where you specify account display method with appropriate argument
}
您可以从jsp页面访问结果,如下所示-
${result}
请在Spring配置文件中启用viewresolver。在编辑和删除方法中的控制器方法中,将消息字符串写入模型中,如下所示 编辑 删除
model.addAttribute("accountList", accountList);
model.addAttribute("message", "Record Deleted Sucessfully");
并在displayAccounts.jsp中编写代码,将此消息显示为
<div>
<span>${message}</span>
</div>
${message}
要实现这一点,您需要使用重定向属性。我假设在编辑和删除操作的POST方法中,您正在使用“重定向:”通过其控制器重定向到显示视图
要实现这一点,您需要将重定向属性
作为控制器函数中的参数。然后在return语句之前,您应该添加以下代码行
attributes.addFlashAttribute("successMsg", "Account Edit/Delete successfully");
或
如果出现错误消息
然后在displaycounts.jsp页面上,您只需使用${successsg}
或${errorMsg}
消息显示后,如果刷新页面,则消息将不会出现。它只会向用户显示一次
这非常适合您的场景。连我都用这个
希望这对你有帮助。干杯。还有其他不涉及Ajax的方法吗?那么我的编辑操作呢,它是在一个单独的视图中发生的?让我试试,让你知道,@arun-kumar@th3an0maly当然请试一试。嗯,我有一个更简单更直接的解决办法。无论如何,感谢您的帮助:)这种方法的问题是,视图displaycounts
将只包含result
属性。除非我执行重定向
,否则它不会显示帐户。此外,按照您的建议,链接仍然是/accounts/{id}/delete
,此后,即使刷新也不会用要显示的帐户填充我的页面。我已经更新了代码。现在您可以在此处调用帐户显示方法表单。还有一种替代方法是使用转发而不是重定向。我得到了一个更简单、更直接的解决方案。无论如何,谢谢你的帮助:)不客气。我也从你的问题中学到了新的东西。这种方法的问题是,视图displaycounts
将只包含result
属性。除非我执行重定向
,否则它不会显示帐户。此外,按照您的建议,链接仍然是/accounts/{id}/delete
,此后,即使刷新也不会用要显示的帐户填充我的页面。您可以在模型中添加多个属性,请检查上面的更新答案。请共享控制器代码快照此方法的问题是,视图displaycounts
将只包含result
属性。除非我执行重定向
,否则它不会显示帐户。此外,按照您的建议,链接仍然是/accounts/{id}/delete
,此后,即使刷新也不会用要显示的帐户填充我的页面。我想我明白了您的问题,您可以使用链接控制器解决这个问题。我已经编辑了我的答案。谢谢你的回答,尼桑·索兰基。“对于我的问题,我得到了一个更直接的答案。分享你的控制器代码快照,这正是我想要的,@japs。”。你似乎很了解这个问题。谢谢你的回答。
<div>
<span>${message}</span>
</div>
attributes.addFlashAttribute("successMsg", "Account Edit/Delete successfully");
attributes.addFlashAttribute("errorMsg", "Edit/Delete account is unsuccessful");