该应用程序是在 Struts 1.2 上进行的。我有一个登录表单,所有与登录相关的验证都会正确显示。对于验证,我使用的是 Validator 框架。
当验证成功但用户身份验证失败时,我无法正确显示登录失败消息。
我ActionError
在 Action 中设置消息,如下所示:
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
为空时,错误就会被正确添加(我通过调试代码验证了这一点)。但是消息没有显示在 UI 中。
这是我在 UI 中添加的内容:
<td align="right">
<div style="color:red">
<html:errors />
</div>
</td>
下面是 struts-config 文件中的条目:
<action input="/mediaLogin.jsp" path="/welcome" type="com.media.action.LoginAction"
name="loginForm" scope="session" validate="true">
<forward name="success" path="/rentLibrary.jsp"></forward>
<forward name="failure" path="/mediaLogin.jsp" redirect="false"></forward>
</action>
对于身份验证失败,我已将路径与登录屏幕相同的页面指定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
:
<form-beans>
<form-bean name="loginForm" type="com.media.form.LoginForm" ></form-bean>
</form-beans>
<action-mappings>
<action input="/mediaLogin.jsp" path="/welcome" type="com.media.action.LoginAction"
name="loginForm" scope="session" validate="true">
<forward name="success" path="/rentLibrary.jsp"></forward>
<forward name="failure" path="/mediaLogin.jsp" redirect="false"></forward>
</action>
</action-mappings>
<message-resources parameter="resources.ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>