스프링 웹 흐름 : 한 흐름에서 다른 흐름으로 값을 전달하는 방법
-
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이 발생합니다.
해결책
두 개의 흐름을 하위 흐름으로 만들면 각 흐름의 데이터를 부모와 다른 하위 흐름에서 사용할 수 있어야합니다.
하위 흐름 세션이 시작되기 전에 데이터를 하위 흐름에 매핑하는 것이 발생합니다. 하위 흐름에서 부모 흐름으로 다시 데이터를 매핑하는 것이 하위 흐름이 완료되고 상위 흐름 세션이 재개 될 때 수행됩니다.
제휴하지 않습니다 StackOverflow