Ich habe viel gesucht und keine Lösung gefunden.Eingabewert wird nach Validierungsfehler nicht gelöscht
Ich verwende JSF 2.1 und 4.2.3 und Richfaces will die Login-Daten des Benutzers
Ich habe zwei Eingabefelder validieren. Ein Benutzername und ein Passwort, die beide mit @NotEmpty
login.xhtml
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:mt="http://java.sun.com/jsf/composite/components">
<h:body>
<ui:composition template="/protected/user/login-template.xhtml">
<ui:define name="panel-navigation">
<ui:include src="/protected/user/login-left-menu.xhtml" />
</ui:define>
<ui:define name="contentbody">
<h:form>
<div id="content">
<div class="subcolumns">
<div class="c65l">
<div class="subcl">
<p class="sum-error-message" />
<fieldset>
<h3>
<h:outputText value="#{styleguideMessages.login}" />
</h3>
<p>
<h:outputText value="#{messages.login_text}" />
</p>
<div class="subcolumns">
<mt:inputText
id="loginName"
value="#{authenticationPM.loginName}"
label="#{messages.general_label_loginname}"
required="true" />
<div class="c33r validation"></div>
</div>
<div class="subcolumns">
<mt:inputText
id="password"
value="#{authenticationPM.password}"
label="#{styleguideMessages.db_password}"
required="true"
secret="true" />
<div class="c33r validation"></div>
</div>
<div class="subcolumns">
<h:commandLink
id="loginButton"
action="#{authenticationPM.doLogin}"
value="#{styleguideMessages.login}"
title="#{styleguideMessages.login}"
styleClass="button last" />
</div>
</fieldset>
</div>
</div>
</div>
</div>
<mt:commandButton
id="login"
action="#{authenticationPM.doLogin}"
value="hidden"
style="visibility:hidden" />
</h:form>
<script
src="#{facesContext.externalContext.requestContextPath}/js/lib/loginEnter.js"
type="text/javascript"
charset="utf-8"></script>
</ui:define>
</ui:composition>
AuthentificationPM.java
import *;
@Named
@SessionScoped
public class AuthenticationPM extends AbstractPM implements Serializable {
/**
* The user name from the login.
*/
private String userName;
/**
* password.
*/
private String password;
/**
* Returns the login name.
*
* @return String
*/
@NotNull
@Pattern(regexp = "^[^\"/\\[\\]:;|=,+?*<>]*$", message = "{user.loginname.pattern}")
public String getLoginName() {
return userName;
}
/**
* Returns the password.
*
* @return String
*/
@NotNull
public String getPassword() {
return password;
}
/**
* Sets the login name.
*
* @param loginName
* - the login name of the user
*/
public void setLoginName(String loginName) {
this.userName = loginName;
}
/**
* Sets the password.
*
* @param password
* - the password of the user
*/
public void setPassword(String password) {
this.password = password;
}
}
Wenn einer von denen (die sagen Passwort) ist n ot gefüllt, schlägt die Validierung fehl und eine Nachricht wird angezeigt (wie es sollte).
Jetzt lösche ich den Benutzernamen und gebe ein Passwort ein. Die Validierung schlägt fehl, weil der Benutzername leer ist. Es bereinigt das Passwortfeld und zeigt eine Nachricht für den Benutzernamen an.
Und jetzt passiert der Fehler: der ehemalige Benutzername eingegeben wieder! Wie kann ich dieses Verhalten verhindern?
Ich weiß, dass nach Prozessvalidierung, die Update Modellwerte und invoke Anwendung übersprungenen sind und die macht Antwort ausgeführt wird. As described here. Die Render-Antwort nimmt die in der ui-Komponente gespeicherten Werte (um apply-Anforderungen) und verwendet sie, um den ungültigen Wert erneut zu rendern, anstatt zu löschen.
Ich habe versucht this solution sowie this idea. Beide Wege finden meine Komponente nicht.
Jede Hilfe oder Ideen werden sehr geschätzt.
Grüße, Kevin
Für mich klingt es wie der Browser die Seite –
Valar Morghulis zwischenspeichert! Ich habe den Cache wie erwähnt [hier] deaktiviert (http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development). Unsere Entwicklungsumgebung lässt Browser die Seite trotzdem nicht zwischenspeichern. Das ist also nicht der Grund. Danke trotzdem! – Wavemaster