Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 输入值不为';验证失败后无法清除_Validation_Jsf_Jsf 2 - Fatal编程技术网

Validation 输入值不为';验证失败后无法清除

Validation 输入值不为';验证失败后无法清除,validation,jsf,jsf-2,Validation,Jsf,Jsf 2,我搜索了很多,但没有找到解决方案 我正在使用JSF2.1和RichFaces4.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://jav

我搜索了很多,但没有找到解决方案

我正在使用JSF2.1和RichFaces4.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>

authenticationpm.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;
}

}
import*;
@命名
@会议范围
公共类AuthenticationPM扩展AbstractPM实现可序列化{
/**
*登录名中的用户名。
*/
私有字符串用户名;
/**
*密码。
*/
私有字符串密码;
/**
*返回登录名。
* 
*@返回字符串
*/
@NotNull
@模式(regexp=“^[^\”/\[\]:;|=,+?*]*$”,消息=“{user.loginname.Pattern}”)
公共字符串getLoginName(){
返回用户名;
}
/**
*返回密码。
* 
*@返回字符串
*/
@NotNull
公共字符串getPassword(){
返回密码;
}
/**
*设置登录名。
* 
*@param loginName
*-用户的登录名
*/
public void setLoginName(字符串loginName){
this.userName=loginName;
}
/**
*设置密码。
* 
*@param密码
*-用户的密码
*/
public void setPassword(字符串密码){
this.password=密码;
}
}
如果其中一个(比如密码)没有填写,验证将失败,并显示一条消息(应该是这样的)

现在我删除用户名并输入密码。 验证失败,因为用户名为空。 它清除密码字段并显示用户名消息

现在出现错误:前面输入的用户名再次出现! 我如何防止这种行为

我知道在流程验证之后,将跳过更新模型值和调用应用程序,并执行呈现响应。呈现响应将获取ui组件中存储的值(在应用请求时),并使用这些值重新呈现,而不是删除无效值

我也试过了。两种方法都找不到我的组件

非常感谢您的任何帮助或想法

您好,
Kevin

如果您只是从inputfield中删除用户名,则该值应作为
空字符串提交,这将是用户名的合法替换,并且与定义的模式匹配

我只能假设,您已经配置了

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

javax.faces.explait_EMPTY_STRING_SUBMITTED_VALUES_为_NULL
真的
在您的web.xml.So中,当您尝试提交一个空字段时,它被解释为
null
,这与您在username属性上的
@NotNull
注释不匹配。因此,该值的设置被取消,它将保持其先前的状态,因为它是
会话范围
-这是已输入的用户名红色一次

至少这是我能想象的,当提交空字符串时,(字符串-)值没有更新的唯一一个szenario

将此值设置为
true
可以重现所描述的行为


您可能会问,为什么这不适用于您在擦除密码时输入密码的文本框?因为您使用的是
secret=“true”
文本框将不会显示有关输入字符串的任何信息(即长度),即使backing bean属性未设置为null(删除密码后)但仍然包含错误的密码


<>但请注意,删除其他属性可能会导致其他DEVS依赖于获得<代码> null >代码>而不是<代码>空字符串< /代码>。因此,您应该考虑删除<代码> @ NoTalb/<代码>注释,并手动检查<代码> NUL> <代码>。ar Morghulis!我已经禁用了前面提到的缓存。我们的开发环境无论如何都不允许浏览器缓存页面。所以这不是原因。无论如何,谢谢!谢谢你的回答。这肯定把我推向了正确的方向。看起来我必须维护
,但现在我知道它为什么会这样。有没有办法在将用户名值设置为
”时,保持bean验证,因为由于密码验证,它不会输入我的代码。