我搜索了很多並沒有找到解決方案。驗證失敗後,輸入值不明確
我使用JSF 2.1和RichFaces的4.2.3,並希望驗證用戶
的登錄數據,我有兩個輸入字段。 一個用戶名和密碼一個,都與@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;
}
}
如果其中的一個(說密碼)是n沒有填充,驗證失敗並顯示一條消息(應該如此)。
現在我刪除用戶名並輸入密碼。 驗證失敗,因爲用戶名爲空。 它會清除密碼字段並顯示用戶名的消息。
現在錯誤發生:前輸入的用戶名重新出現! 如何防止此行爲?
我知道後工藝驗證,在更新模型值和調用應用程序被跳過,呈現響應執行。 As described here.呈現響應獲取存儲在UI組件中的值(在應用請求),並使用它們重新渲染而不是刪除無效值。我試過this solution以及this idea。兩種方式都沒有找到我的組件。
任何幫助或想法都非常讚賞。
問候, 凱文
對我來說,這聽起來像瀏覽器緩存頁面 – 2014-09-30 17:22:22
Valar Morghulis! 我已經像上面提到的[這裏]禁用了緩存(http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development)。 我們的開發環境不允許瀏覽器緩存頁面。 所以這不是原因。 無論如何,謝謝! – Wavemaster 2014-10-01 07:44:18