2014-06-14 1 views
0

전자 메일이라는 문자열을 다른 용도 (등록, 복구 암호, 로그인)로 사용합니다. 따라서 뷰/플로우 간 이동을 원하고 빈 필드는 자동으로 정리해야하지만이 동작은 발생하지 않습니다.스프링 웹 플로우 형식 필드

그것은 JSF2/봄 프로젝트

흐름 정의

<var name="viewScope.loginFields" class="es.project.viewBean.ConnectionFields" /> 

<view-state id="login" view="login.xhtml" model="loginFields"> 
    <transition on="entry" to="connect"/> 
    <transition on="recoveryPass" to="recovery" /> 
</view-state> 


<view-state id="recovery" view="recovery.xhtml" model="loginFields"> 
    <transition on="return" to="login" /> 
    <transition on="sendPass" to="recoveryPass" /> 
</view-state> 

Bean 정의

@Service("loginFields") 
public class ConnectionFields implements Serializable { 

private static final long serialVersionUID = 1L; 

private static Logger logger=LogManager.getLogger(ConnectionFields.class); 

@NotNull(message="{field.notEmpty.validation}") 
@Email(message="{field.email.validation}") 
private String email; 

@NotNull(message="{field.notEmpty.validation}") 
@Size(min=6,max=12,message="{field.size.validation}") 
@Pattern(regexp="^[a-zA-Z0-9]*$",message="{field.onlyAlpha.validation}") 
private String password; 

@NotNull(message="{field.notEmpty.validation}") 
@Size(min=6,max=12,message="{field.size.validation}") 
@Pattern(regexp="^[a-zA-Z0-9]*$",message="{field.onlyAlpha.validation}") 
private String passwordRepeated; 

@NotNull(message="{field.notEmpty.validation}") 
@Email(message="{field.email.validation}") 
private String emailRepeated; 
    ........... 
    ........... 
    ........... 
    } 

recovery.xhtml

에게있어 ,
<h:form id="formRecovery"> 
      <h:panelGroup layout="block" id="containerFormRecovery" styleClass="containerFormRecovery"> 
      <p:focus /> 
       <h:panelGroup layout="block" styleClass="formRecovery-row"> 
        <h:outputLabel for="email" value="#{msg['email.txt']}" /> 
        <h:inputText id="email" value="#{loginFields.email}" title="#{msg['email.txt.title']}" alt="#{msg['email.txt.alt']}" styleClass="#{component.valid ? '' : 'invalid'}" size="35" tabindex="1"> 
         <f:validateBean for="email" /> 
         <p:ajax event="blur" update="@this emailError"/> 
        </h:inputText> 
        <h:message for="email" id="emailError" styleClass="messageError" /> 
       </h:panelGroup> 
       <h:panelGroup layout="block" styleClass="formRecovery-row"> 
        <p:captcha id="captcha" theme="white" requiredMessage="#{msg['captcha.required']}" tabindex="2"> 

        </p:captcha> 
        <h:message for="captcha" id="captchaError" styleClass="messageError"/> 
       </h:panelGroup> 
       <h:panelGroup layout="block" id="containerRecoveryButtons" styleClass="containerRecoveryButtons"> 
        <h:commandButton value="#{msg['send.btn']}" title="#{msg['send.btn.title']}" alt="#{msg['send.btn.title']}" action="sendPass" tabindex="3" /> 
       </h:panelGroup> 
      </h:panelGroup> 
      </h:form> 
      <h:panelGroup> 
       <h:commandLink value="#{msg['return.btn']}" title="#{msg['return.btn.title']}" alt="#{msg['return.btn.alt']}" action="return" tabindex="4" /> 
</h:panelGroup> 

login.xthml가 위의 예에서

   <h:form id="formLogin"> 
      <h:panelGroup layout="block" id="containerFormLogin" styleClass="containerFormLogin"> 

       <p:focus /> 
       <h:panelGroup layout="block" styleClass="formLogin-row"> 
         <h:outputLabel for="email" value="#{msg['email.txt']}" /> 
         <h:inputText id="email" value="#{loginFields.email}" title="#{msg['email.txt.title']}" alt="#{msg['email.txt.alt']}" styleClass="#{component.valid ? '' : 'invalid'}" size="35" tabindex="2"> 
          <f:validateBean for="email" /> 
          <p:ajax event="blur" update="@this emailError" /> 
         </h:inputText> 
         <h:message for="email" id="emailError" styleClass="messageError" /> 
       </h:panelGroup> 
       <h:panelGroup layout="block" styleClass="formLogin-row"> 
         <h:outputLabel for="password" value="#{msg['pass.txt']}" /> 
         <p:password id="password" value="#{loginFields.password}" title="#{msg['pass.txt.title']}" alt="#{msg['pass.txt.alt']}" 
          styleClass="#{component.valid ? '' : 'invalid'}" size="35" tabindex="3"> 
          <f:validateBean for="password" /> 
          <p:ajax event="blur" update="@this passwordError" /> 
         </p:password> 
         <h:message for="password" id="passwordError" styleClass="messageError" /> 
       </h:panelGroup> 

       <p> 
        <h:outputLabel for="remember" value="#{msg['rememberSession.msg.check']}" /> 
        <h:selectBooleanCheckbox id="remember" value="#{loginFields.remember}" tabindex="4" title="#{msg['rememberSession.title.check']}" /> 
       </p> 
       <h:panelGroup layout="block" id="containerLoginButtons" styleClass="containerLoginButtons"> 
        <h:commandButton value="#{msg['login.long.btn']}" action="entry" tabindex="5" title="#{msg['login.long.btn.title']}" alt="#{msg['login.long.btn.alt']}" /> 
       </h:panelGroup> 
      </h:panelGroup> 
      </h:form> 
      <p> 
       <h:form> 
        <h:commandLink value="#{msg['recoveryPassword.msg.link']}" action="recoveryPass" /> 
       </h:form> 
      </p> 

, 내 생각은 로그인 페이지 및 viceversa에에서 RecoveryPassword 페이지로 이동하는 것입니다, 나는 이메일 필드 리셋 값 자체 내가보기를 변경하고 싶지만 이메일은 가치를 결코 재설정하지 않습니다.

답변

1

한 가지 방법은 미국 내 <transition> 또는 <on-entry>의 값을 삭제하는 것입니다. 세터 메소드 만 사용하거나 맞춤 메소드 (예 : reset()) 만 있으면됩니다. 우리는 국가에 들어가는 것이 들판을 청소할 것을 요구하는 여러 가지 다른 조건을 위해 이것을합니다.

<view-state id="recovery"> 
    <on-entry> 
     <set name="loginFields.email" value="''"/> 
    </on-entry> 
... 
</view-state> 
+0

고마워요! 잘 작동합니다 :) –