アプリケーションはStruts1.2で作成されています。ログインフォームがありますが、ログインに関連するすべての検証が正しく表示されています。検証には、Validatorフレームワークを使用しています。
検証は成功したがユーザー認証が失敗した場合、ログイン失敗メッセージを正しく表示できません。
私は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の場合、エラーは適切に追加されています(コードをデバッグしてこれを確認しました)。ただし、メッセージは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>