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失败,我将路径指定为具有登录屏幕的同一页面,并将redirect
为false
。
请让我知道我错过了什么:)
编辑
完整代码:
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.validate
, ERROR_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");
之后,可以通过
首先,即使您没有按照@RomanC的建议在其中编写代码,也要添加一个空白的validate()方法。
然后,尝试添加
saveErrors(request, errors);
后
errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.invalidCredentials"));
如果这不起作用,请回复。 让我们先让它工作,然后你更好地使用@RomanC建议的标准方式。