Spring Web Flow: как передать значения от одного потока к другому потоку

StackOverflow https://stackoverflow.com/questions/1872602

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть веб -приложение Java с использованием Spring Web Flow.

Как передать значения от одного потока к другому потоку?

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

У меня проблема с функциональностью редактирования здесь. На моей странице редактирования у меня есть имя пользователя, OldPassword, NewPassword и подтверждают поля пароля.

Сначала в состоянии validateaccount я проверяю, существует ли имя пользователя и OldPassword в базе данных, если оно не существует, я пересылаю его в состояние Queryall.

Если он существует, я проверяю, являются ли новые значения пароля и подтверждают слова одинаковы, если они одинаковы, я приеду к редактированию.

Если нет, я снова вернусь к Queryall.

State Queryall обеспечивает полномочия пользователя заполнить его в форме при повторном разжигании страницы. Когда я оставляю поля пароля пустыми, и в первый раз, когда я нажимаю кнопку «Редактировать», она бросает java.lang.nullpointerException.

Это было полезно?

Решение

Создайте два потока в качестве подтоконов, а затем данные в каждом потоке должны быть доступны в родительском и другом подсчетах.

Сопоставление данных с подтоком происходит до начала сеанса подтока. Сопоставление данных из подтока обратно в родительский поток выполняется при завершении подтока, а родительский сеанс потока возобновится.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top