스프링 웹 흐름 : 한 흐름에서 다른 흐름으로 값을 전달하는 방법

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

  •  18-09-2019
  •  | 
  •  

문제

스프링 웹 흐름을 사용하여 Java 웹 응용 프로그램이 있습니다.

한 흐름에서 다른 흐름으로 값을 전달하려면 어떻게합니까?

<?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 및 비밀번호 필드 확인이 있습니다.

먼저 ValidAccount State에서 데이터베이스에 사용자 이름과 OldPassword가 존재하는지 확인합니다. 존재하지 않으면 QueryAll 상태로 전달됩니다.

그것이 존재하는 경우 새 비밀번호와 quictpassword 값이 동일인지 확인합니다. 동일하면 편집을 진행합니다.

그렇지 않으면 다시 QueryAll로 돌아갑니다.

QueryAll State는 페이지를 다시 파악할 때 사용자의 권한을 양식으로 채울 수 있도록합니다. 비밀번호 필드를 비워두면 처음 편집 버튼을 클릭하면 java.lang.nullpointerexception이 발생합니다.

도움이 되었습니까?

해결책

두 개의 흐름을 하위 흐름으로 만들면 각 흐름의 데이터를 부모와 다른 하위 흐름에서 사용할 수 있어야합니다.

하위 흐름 세션이 시작되기 전에 데이터를 하위 흐름에 매핑하는 것이 발생합니다. 하위 흐름에서 부모 흐름으로 다시 데이터를 매핑하는 것이 하위 흐름이 완료되고 상위 흐름 세션이 재개 될 때 수행됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top