Question

This problem is driving me crazy.

I have following view-state:

 <on-start>
    <evaluate expression="new com.zxxztech.zecure.services.webflow.FormularioConfirmacionCorreo()"
        result="flowScope.ccForm" />
 </on-start>

<view-state id="activacionManual" model="ccForm" >
    <transition on="enviar" to="resultado" bind="true">
        <evaluate expression="usersManager.activarUsuario(ccForm.correo, ccForm.codigo)"
            result="flowScope.resultado" />  
    </transition>
    <transition on="cancelar" to="cancelar" validate="false" bind="false" />
</view-state>

And this is this the Validation class:

@Component
public class FormularioConfirmacionCorreoValidator {


 @Autowired
 private UsersManager usersManager;

 public void validateActivacionManual(FormularioConfirmacionCorreo ccForm, ValidationContext validContext) {
         ...
         [Validation logic]

}

  public UsersManager getUsersManager() {
    return usersManager; 
  }

 public void setUsersManager(UsersManager usersManager) {
       this.usersManager = usersManager;
 }
}

When form is submited, webflow execute <evaluate> tag directly, without calling validation method.

I don't know what could I doing wrong.

Edit:

This is the activacionManual.jsp file:

              ...
              <form:form cssClass="ym-form" modelAttribute="ccf" method="post" action="${flowExecutionUrl}">
                <form:errors cssClass="ym-error" element="div" path="*"/>
                <div class="ym-box">
                    <div class="ym-fbox">
                        <label for="correo"><spring:message
                                code="activacion.form.correo.label"
                                text="activacion.form.correo.label" /></label> 
                        <form:input path="correo" />
                    </div>
                    <div class="ym-fbox">
                        <label for="codigo"><spring:message
                                code="activacion.form.codigo.label"
                                text="activacion.form.codigo.label" /></label>
                                <form:input path="codigo" />
                    </div>
                    <div class="ym-fbox-footer ym-fbox-button">
                        <input class="ym-button ym-gr" type="submit" 
                            value="<spring:message code="formulario.button.cancelar" text="formulario.button.cancelar" />"
                            name="_eventId_cancelar">
                        <input class="ym-button ym-primary ym-gr" type="submit"
                            value="<spring:message code="formulario.button.enviar" text="formulario.button.enviar" />" 
                            name="_eventId_enviar">
                    </div>
                </div>
              </form:form>
              ...
Was it helpful?

Solution

The second way is to define a separate object, called a Validator, which validates your model object. To do this, first create a class whose name has the pattern ${model}Validator, where ${model} is the capitialized form of the model expression, such as booking. Then define a public method with the name validate${state}, where ${state} is the id of your view-state, such as enterBookingDetails.

Thus, since your model attribute is ccForm, the validator Class must be named CcFormValidator. (Or rename your model attribute.)

(Also, I think your JSP is going to have problems using modelAttribute="ccf" instead of "ccForm". The model name needs to match across flow.xml, JSPs, and validators.)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top