Flex: как изменить состояние в форме входа в систему после того, как валидация действительна?

У меня есть простая форма входа в систему, где пользователь вводит userSAP no (должно быть число) и пароль (минимум 8 символов). Я выполнил проверку для каждого поля. Я хочу сначала проверить, проходит ли проверка, прежде чем она изменит состояние с LoginMode_Default на состояние PerviewMode. После входа пользователя в систему отображается приветственное сообщение для пользователя.

В своих кодах, когда пользователь нажимает кнопку входа в систему, я вызываю функцию validateLogin (), чтобы проверить, действительны ли поля. Если они действительны, установите currentState в состояние PerviewMode.

В PerviewMode пользователь может щелкнуть по выходу из системы, что вызывает функцию logoff (), чтобы вернуться в состояние LoginMode_Default.

Однако, когда я нажимаю ссылку выхода, она возвращается к форме входа в систему, но поля userId и password обведены красным. Как я могу вернуться к форме входа в систему, чтобы поля не были обведены красным? Я правильно делаю? Есть ли лучший или правильный способ сделать это? Пожалуйста, может мне кто-нибудь помочь с этим? Спасибо:)

Мои коды подтверждения

    <fx:Declarations>       
    <s:NumberValidator id="userSAPValidator" 
                       property="text" 
                       required="true"
                       domain="int"
                       notAnIntegerError="Should not conatin any decimal"
                       allowNegative="false"
                       negativeError="Should not contain negative values"
                       parseError="Enter only numbers without space"
                       source="{userSAP_field}"/>   

    <mx:StringValidator id="userPasswordValidator"                          
                        property="text"                                                     
                        required="true"                         
                        minLength="8"                           
                        tooShortError="password must at least be 8 characters"
                        source="{userPassword_field}"/>         
</fx:Declarations>

Мои состояния в MXML:

<s:states> 
    <s:State name="LoginMode_Default"/> 
    <s:State name="PerviewMode"/>   
</s:states> 

Моя форма входа в систему MXML:

     <s:BorderContainer id="login_BC" x="1" y="1" width="223" height="134"
                           x.LoginMode_Default="2" y.LoginMode_Default="9"
                           height.LoginMode_Default="152" height.PerviewMode="40">


               <s:Form id="loginForm" x="5" y="7" width="212" height="133"
                    x.LoginMode_Default="4" y.LoginMode_Default="5" excludeFrom="PerviewMode">  
                   <s:layout>
                       <s:BasicLayout/>
                   </s:layout>                 
                   <s:Label x="0" y="14" width="52" height="18" text="SAP no :" paddingTop="5"/>                           
                   <s:TextInput id="userSAP_field" x="74" y="10" width="108"/>
                   <s:Label x="0" y="52" text="Password :" paddingTop="5"/> 
                   <s:TextInput id="userPassword_field" x="73" y="48" width="109" height="21" displayAsPassword="true"/>                       
                <s:Button id="loginButton" x="6" y="82" label="Login" click="validateLogin()" />                          
            </s:Form>

            <s:HGroup includeIn="PerviewMode" width="245" height="41">
                <s:Label id="welcome_text" text="Welome your name" paddingTop="12"  paddingLeft="10"/>
                <mx:LinkButton label="logout" click="logOff()" paddingTop="6"/>                 
            </s:HGroup> 

        </s:BorderContainer>

Моя функция validateLogin:

private function validateLogin():void {

var vResult1:ValidationResultEvent;
var vResult2:ValidationResultEvent;

vResult1 = userPasswordValidator.validate();
vResult2 = userSAPValidator.validate();

if (vResult1.type==ValidationResultEvent.VALID && vResult2.type == ValidationResultEvent.VALID ) {      
    this.currentState = "PerviewMode";

}
else{       
    this.currentState = "LoginMode_Default";        
}

}

Моя функция выхода из системы:

private function logOff():void {
this.currentState = "LoginMode_Default";
userPassword_field.text ="";
userSAP_field.text =""; 

}


person user2017147    schedule 04.03.2013    source источник
comment
Это может помочь .. stackoverflow.com/questions/2243582/   -  person Chetan Sachdev    schedule 04.03.2013


Ответы (2)


Попробуйте добавить

userSAP_field.errorString = '';
userPassword_field.errorString = '';

к вашей logOff() функции.

person Art    schedule 04.03.2013
comment
Привет! нет, это не работает .. Красный контур исчез, однако данные в текстовом поле не очищаются. что я могу сделать ? - person user2017147; 04.03.2013
comment
У вас еще есть userSAP_field.text =""; и userPassword_field.text =""; в вашей функции? - person Art; 04.03.2013
comment
@Art .. Да, теперь работает .. после добавления userSAP_field.errorString = ''; и userSAP_field.text =; Большое спасибо :) - person user2017147; 05.03.2013

Когда вы меняете текст ввода, валидатор проверяет значение. Попробуйте отключить нужную опцию, а затем очистите ввод текста:

private function logOff():void {
        this.currentState = "LoginMode_Default";

        userSAPValidator.required = false;
        userPasswordValidator.required = false;

        userSAP_field.text =""; 
        userPassword_field.text ="";

        userSAPValidator.required = true;
        userPasswordValidator.required = true;
}
person Ilya Zaytsev    schedule 04.03.2013