ActionError消息未在UI中显示

该应用程序是在Struts 1.2上完成的。 我有一个登录表单,所有与登录相关的validation都会正确显示。 对于validation,我使用的是Validator框架。

validation成功但用户身份validation失败后,我无法正确显示登录失败消息。

我在Action中设置ActionError消息,如下所示:

 Login loginDetails = validateUser(loginForm); if(loginDetails == null){ errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.invalidCredentials")); return mapping.findForward("failure"); } 

下面是ApplicationResources.properties文件中的条目:

 error.invalidCredentials=User Name and Password does not match. 

loginDetails为null时,错误被正确添加(我通过调试代码validation了这一点)。 但是消息没有显示在UI中。

这是我在UI中添加的内容:

  

下面是struts-config文件中的条目:

     

对于身份validation失败,我将路径指定为具有登录屏幕的同一页面,并将redirectfalse

请让我知道我错过了什么:)

编辑

完整代码:

 LoginForm loginForm = (LoginForm)form; HttpSession session = request.getSession(); ActionErrors errors=new ActionErrors(); if(loginForm.getAction().equalsIgnoreCase("Login")){ // Provide the NUll Check Login loginDetails = validateUser(loginForm); if(loginDetails == null){ errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.invalidCredentials")); return mapping.findForward("failure"); } populateLoginDetails(loginDetails, loginForm); } System.out.println("**************************************" + mapping.getAttribute() + "**************************************"); session.setAttribute("userDetails", loginForm); return mapping.findForward("success"); 

Struts-Config.xml

              

错误消息未显示,因为您没有从validation器表单中获取它们。 Struts使用您的表单应该扩展的ValidatorForm并覆盖validate方法。 在validate方法中,您可以手动或使用Apache commonsvalidation器检查表单字段。 例如, GenericValidator.isBlankOrNull检查字段是必需的。 填写ActionErrors并调用super.validate以从可以合并的框架中获取其他错误。 一旦调用super.validateERROR_KEY就已经被请求了。 另外在使用strutsvalidation器框架进行error handling的post 问题中,我已经描述了如何在validation期间处理exception以将EXCEPTION_KEY放入error属性。 其他一些事情,如操作中的跳过validation和validation调度方法可能由于覆盖RequestProcessor添加validation方法键(validation方法键是用于映射getKeyMethodMap()使用的方法的键),并处理processValidation

 ActionErrors actionErrors = super.validate(mapping, request); actionErrors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage("error.invalidCredentials")); 

编辑:

如果要忽略validation框架并在操作中手动validation

 ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage("error.invalidCredentials")); request.setAttribute(Globals.ERROR_KEY, errors); return mapping.findForward("failure"); 

之后,可以通过在JSP中显示它。

   

首先,即使您没有按照@RomanC的建议在其中编写代码,也要添加一个空白的validate()方法。

然后,尝试添加

 saveErrors(request, errors); 

 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.invalidCredentials")); 

如果这不起作用,请回复。 让我们先让它工作,然后你更好地使用@RomanC建议的标准方式。