2

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

  1. 显示使用displayAccounts.jsp并被/accountsurl调用
  2. 编辑使用editAccount.jsp并由要编辑的帐户的主键在/accounts/{id}/edit哪里调用。id
  3. Delete没有自己的视图,只是调用@RequestMappingController中的方法,并由/accounts/{id}/delete

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

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

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

请帮忙。提前致谢。

4

6 回答 6

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}

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

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

希望这对您有所帮助。干杯。

于 2012-09-28T07:57:56.840 回答
2

如果您的EDIT操作打开不同的视图,那么您可以使用以下命令将消息从 Controller 传递到视图

ModelAndView  mav = new ModelAndView();

然后将消息对象设置为

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

最后,设置视图名称

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

您可以直接在视图上使用消息作为${mesasage}

于 2012-09-28T05:27:36.563 回答
2

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

编辑

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>
于 2012-09-28T05:35:48.660 回答
1

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

于 2012-09-28T05:14:34.250 回答
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 控制器,以便显示刷新的数据。试试这个希望它的工作

于 2012-09-28T05:33:54.030 回答
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。

于 2012-09-28T05:34:23.857 回答