Spring - 如何在Views之间传递消息?

时间:2012-09-28 05:08:44

标签: java spring controller

我有一个显示,编辑和删除帐户的应用程序。

  1. 显示使用displayAccounts.jsp并由/accounts url
  2. 调用
  3. 修改使用editAccount.jsp并由/accounts/{id}/edit调用,其中id是要修改的帐户的主键。
  4. 删除没有自己的视图,只是调用Controller中的@RequestMapping方法,并由/accounts/{id}/delete
  5. 调用

    成功时,每个操作都会重定向到“显示”页面。

    1. 成功执行操作(编辑/删除)后,我想发送可在“显示”页面上显示的成功消息。我怎样才能做到这一点?

    2. 由于我没有删除操作的视图,我也希望在显示页面中显示错误。

    3. 请帮忙。提前谢谢。

6 个答案:

答案 0 :(得分:8)

使用RedirectAttributes是您实现这一目标所需要的。我假设从EDIT和DELETE操作的POST方法中,您使用“redirect:”通过其控制器重定向到DISPLAY视图。

要实现此目的,您需要将RedirectAttributes attributes作为控制器功能中的参数。然后在return语句之前添加以下代码行。

attributes.addFlashAttribute("successMsg", "Account Edit/Delete successfully");

attributes.addFlashAttribute("errorMsg", "Edit/Delete account is unsuccessful");

如果出现错误消息。

然后在 displayAccounts.jsp 页面上,您只需显示包含${successMsg}${errorMsg}

的讯息

一旦显示消息,如果刷新页面,则消息将不会出现。它只会向用户显示一次。

这非常适合您的场景。即使我使用它。

希望这会对你有所帮助。欢呼声。

答案 1 :(得分:1)

在这种情况下,您可以使用 AJAX 。使用此功能,您可以将操作从同一页面发送到控制器以进行删除操作,并从同一页面上的控制器获取消息,以显示控制器删除操作的成功/错误消息。

答案 2 :(得分:1)

如果您的 EDIT 操作打开了不同的视图,那么您可以使用以下

将消息从Controller传递到视图
ModelAndView  mav = new ModelAndView();

然后将消息对象设置为

mav.addObject("message", "EDIT sucessfully completed");

最后,设置视图名称

mav.setViewName("views/afterEditOperation/");

您可以直接在视图中将消息用作 $ {mesasage}

答案 3 :(得分:1)

如果你想从控制器传递一些消息(错误/成功)到显示页面,而不是代码帮助,

@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>

详细说明这是否适合您。

谢谢


好吧,我认为我的观点是这样做的,

@RequestMapping(method = RequestMethod.GET)
    public String editDelete(ModelMap model) {

        if(success)
        {
            model.addAttribute("result", "Success");
            return new ModelAndView("redirect:/displaytagView");//Chaining your controller so it will refresh your Accounts
        }else{
            model.addAttribute("result", "Error");
                        return "displayPage";
        }
    }

将控制器链接到displayPage Controller,以便显示刷新的数据。试试这个希望它的工作

答案 4 :(得分:1)

Spring提供ModelMap类型对象,可以将您的数据放在ModelMap类型对象中。该对象可以在整个应用程序中访问。在这里,您可以放置​​一个String类型变量,其值为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。

答案 5 :(得分:1)

在编辑和删除方法的Controller方法中,将消息字符串写入模型

修改

model.addAttribute("message", "Record Edited Sucessfully");
model.addAttribute("accountList", accountList);

删除

model.addAttribute("accountList", accountList);
model.addAttribute("message", "Record Deleted Sucessfully");

并在您的displayAccounts.jsp中编写代码以将此消息显示为

<div>
  <span>${message}</span>
</div>