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 成功后,每个操作都会重定向到显示页面 成功执行操作(编辑/删除)后,我想发送一条可显示在显示页面上的成功消息。我怎样才能做到

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

  • Display使用
    displayAccounts.jsp
    ,由
    /accounts
    url调用
  • Edit使用
    editAccount.jsp
    ,由
    /accounts/{id}/Edit
    调用,其中
    id
    是要编辑的帐户的主键
  • Delete没有自己的视图,只调用控制器中的
    @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");