ActionError-Nachricht nicht immer angezeigt in der UI
Den Antrag auf Struts 1.2. Ich habe ein login-Formular, alle Validierungen im Zusammenhang mit der Anmeldung werden immer richtig angezeigt. Für die Validierungen, ich bin mit dem Validator framework.
Wenn die Validierung erfolgreich, aber die Benutzer-Authentifizierung fehlschlägt, dann bin ich nicht in der Lage, um die Anzeige des login-Fehlermeldung richtig.
Ich bin Einstellung der ActionError
Meldung in der Aktion wie folgt:
Login loginDetails = validateUser(loginForm);
if(loginDetails == null){
errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.invalidCredentials"));
return mapping.findForward("failure");
}
Unten ist der Eintrag in der ApplicationResources.properties
Datei:
error.invalidCredentials=User Name and Password does not match.
Wenn die loginDetails
null ist dann der Fehler immer korrekt Hinzugefügt (ich habe überprüft dies durch Debuggen des Codes). Aber die Nachrichten sind nicht immer in der Benutzeroberfläche angezeigt.
Dies ist, was ich Hinzugefügt in der Benutzeroberfläche:
<td align="right">
<div style="color:red">
<html:errors />
</div>
</td>
Unten ist der Eintrag in der struts-config-Datei:
<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>
Für einen Authentifizierungsfehler, habe ich den Pfad als die gleiche Seite mit der login-Bildschirm und aus der redirect
zu false
.
Bitte lassen Sie mich wissen, was vermisse ich 🙂
BEARBEITEN
Vollständige code:
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>
- Bekommst du irgendwelche Fehler in der Kommandozeile? Wenn ja, legen Sie die Stapel-Ablaufverfolgung.
- NEIN, habe ich nicht alle Fehler...irgendwelche Hinweise?
- Bezieht sich auf die Eigenschaften der Datei bedeutet? Ich habe nicht alles getan, wie unter Bezugnahme auf die propertiesfile, irgendwo anders als die
ActionError
parameter. Kann dies der Fehler...kannst du bitte posten was soll ich tun, außer was ich oben geschrieben? btw, ich habe die erste vollständige code...lassen Sie mich wissen, wenn Sie eine andere info. - Post das ganze struts-config-Datei
- pls chk und lassen Sie mich wissen...abgesehen von tht ich habe nur die form-beans Hinzugefügt
- Ich will sehen, die form-beans-tag als gut. Also erzählte ich Ihnen, post die ganze Datei!!
- Ich habe aktualisiert!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fehlermeldungen nicht immer angezeigt, zu Recht, denn Sie bekommen Sie nicht aus dem validator-form. Struts verwenden
ValidatorForm
, dass Ihr Formular erweitert werden soll und überschreiben Sie dievalidate
Methode. In dervalidate
- Methode können Sie überprüfen Sie die Formularfelder manuell oder mithilfe von Apache commons validator.GenericValidator.isBlankOrNull
zum Beispiel-Prüfungen für Felder sind erforderlich. Füllen Sie dieActionErrors
aus und rufen Sie densuper.validate
zu bekommen, weitere Fehler aus dem framework, die Sie Zusammenführen können. Sobald Sie den Anrufsuper.validate
dieERROR_KEY
ist bereits in Anfrage. Zusätzlich sind in der post problem in der Fehlerbehandlung mit struts validator framework habe ich beschrieben, wie die Behandlung von Ausnahmen während der überprüfung zu setzenEXCEPTION_KEY
zu denerror
Attribut. Andere Dinge wie das überspringen der Validierung in den Aktionen und Validierung verteilte Methoden möglich durch überschreibenRequestProcessor
hinzufügen von Validierung Methode keys (Validierung der Methode Key ist der Schlüssel für die Zuordnung der Methode, die vongetKeyMethodMap()
), und Griff denprocessValidation
.EDIT:
Wenn Sie möchten, ignorieren Sie die validation-framework und tun manuell zu validieren, der in der Aktion
Danach wird es möglich sein, zeigen Sie es in der JSP über
<html:messages
.validateUser
- Methode enthält den code für das schlagen der DB und das abrufen der Werte. Bitte rpelyValidatorForm.validate
aus dem Rahmen, der verwendet commons validator.validate
Methode starten, bevor die Aktion und wenn die Aktion Fehler sind nicht leer, es löst Eingabe ohne Aktion ausführen. So haben Sie, es zu überprüfen, da Ihre Benutzer.validate
Sie geliefert haben, die mit der Zuordnung und verlangen, aber ohne Reaktion, so Sie nicht der Versand direkt von dort aus, es sei denn, Sie setzen response in den request-Attribut. Aber Sie halten können, frameworkActionErrors
leer bei der Validierung und zurück zu der Aktion, wo Sie können gehen mit nach vorne.Zuerst fügen Sie eine leere Methode validate (), auch wenn Sie nicht den code schreiben, es wie vorgeschlagen von @RomanC.
Dann versuchen Sie,
nach
Wenn dies nicht funktioniert, wieder melden. Lasst uns erst die Arbeit, dann verwenden Sie besser die standard-Weg, wie @RomanC schlägt.