Pregunta

Tengo una aplicación web Java utilizando Spring Web Flow.

¿Cómo pasar valores de un flujo a otro flujo?

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
    xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/webflow
                          http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

    <persistence-context />

    <var name="editBean" class="jp.co.anicom.domain.User" />
    <var name="deleteBean" class="jp.co.anicom.domain.User" />
    <var name="authorityBean" class="jp.co.anicom.domain.Authority" />


    <on-start>
        <set name="flowScope.username" value="requestParameters.username" />
    </on-start>

    <action-state id="queryAll">
        <evaluate expression="employeeAction.GetAuthority(flowScope.username)"
            result="authorityBean" />
        <transition to="editForm" />
    </action-state>

    <view-state id="editForm" model="editBean" view="../xhtml/framework/edit">
        <transition on="editButton" to="validateAccount" />
        <transition on="delete" to="getId" />
        <transition on="back" to="editSuccessful" />
    </view-state>

    <action-state id="validateAccount">
        <evaluate expression="employeeAction.GetEmployee(flowScope.username, oldPassword)"
            result="editBean" />
        <transition to="checkUserAccount" />
    </action-state>

    <action-state id="getId">
        <evaluate expression="employeeAction.GetEmployee(flowScope.username)"
            result="deleteBean" />
        <transition to="deleteUser" />
    </action-state>

    <decision-state id="checkUserAccount">
        <if test="editBean == null" then="queryAll"
            else="confirmPassword" />
    </decision-state>

    <decision-state id="confirmPassword">
        <if test="newPassword.equals(confirmPassword)" then="editUser1"
            else="queryAll" />
    </decision-state>

    <action-state id="editUser1">
        <set name="editBean.password" value="newPassword" />
        <transition to="editUser2" />
    </action-state>

    <action-state id="editUser2">
        <evaluate
            expression="employeeAction.editEmployee(editBean, authorityBean.authority)" />
        <transition to="editSuccessful" />
    </action-state>

    <action-state id="deleteUser">
        <evaluate expression="employeeAction.deleteEmployee(deleteBean)" />
        <transition to="editSuccessful" />
    </action-state>

    <end-state id="editSuccessful"
        view="externalRedirect:contextRelative:/admin_main.do" commit="true" />
    <end-state id="displayError" view="../xhtml/framework/displayError" />
    <end-state id="dummy1" view="../xhtml/framework/dummy" />

    <global-transitions>
        <transition on-exception="java.lang.Exception" to="displayError" />
    </global-transitions>

</flow>

Estoy teniendo un problema con la funcionalidad de edición aquí. En mi página de edición que tengo nombre de usuario, contraseñaantigua, newpassword y confirmo los campos de contraseña.

En primer lugar, en el estado validateAccount puedo comprobar si el nombre de usuario y contraseñaantigua existe en la base de datos, si no existe remito a queryAll estado.

Si existe puedo comprobar si los nuevos valores de contraseña y ConfirmPassword son los mismos, si son el mismo procedo con la edición.

Si no vuelvo de nuevo a queryAll.

queryAll estado obtiene la autoridad del usuario para poblar en la forma en la re-visualización de la página. Cuando salgo de los campos de contraseña en blanco y la primera vez que el botón Editar Se lanza una java.lang.NullPointerException.

¿Fue útil?

Solución

Crea tus dos flujos como subflujos y luego los datos de cada flujo deben estar disponibles en el padre y los otros subflujos.

  

Los datos del mapeo de la corriente parcial que pasa   antes de iniciar la sesión de flujo secundario.   Los datos del mapeo de la corriente parcial de nuevo a   el flujo principal se realiza cuando el   ultima Subflow y el flujo de los padres   reanuda la sesión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top