Pergunta

Eu tenho um aplicativo da Web Java usando o Spring Web Flow.

Como faço para passar valores de um fluxo para outro?

<?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>

Estou tendo um problema com a funcionalidade de edição aqui. Na minha página de edição, tenho nome de usuário, OldPassword, NewPassword e confirmar campos de senha.

Primeiro no Estado ValidateCCount, verifico se o nome de usuário e o OldPassword existem no banco de dados, se ele não existe, a encaminhe para o Queryall State.

Se existir, verifico se os valores da nova senha e confirmar as palavras são os mesmos, se forem iguais, continuo com a edição.

Caso contrário, volto novamente ao Queryall.

O Queryall State faz com que a autoridade do usuário o preencha no formulário ao se dividir novamente a página. Quando deixo os campos de senha em branco e, na primeira vez em que clico em Botão Editar, ele lança um java.lang.nullPointerException.

Foi útil?

Solução

Crie seus dois fluxos como subfluentes e, em seguida, os dados em cada fluxo devem estar disponíveis no pai e nos outros subfluentes.

O mapeamento de dados para o subfluxo ocorre antes do início da sessão do subfluxo. O mapeamento de dados do subfluxo de volta ao fluxo pai é feito quando o subfluxo é concluído e a sessão de fluxo pai é retomada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top