Spring Web Flow: не могу получить второе представление
Я использую Spring Web Flow для процесса регистрации. У меня первая страница потока отлично, но когда я нажимаю на кнопку, которая должна перейти на вторую страницу, я снова получаю первую страницу потока. Как вы увидите в коде, у меня есть flowExecutionKey на метке, и он переходит от e1s1 к e2s1, когда я нажимаю кнопку, поэтому вместо того, чтобы привести меня ко второму представлению потока, он запускает новый поток, я думаю,
Вот код:
Итак, у меня есть этот flow.xml:
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
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" start-state="inicio">
<var name="proyecto" class="myPackage.MyModelClass"/>
<view-state id="inicio" view="inicio" model="proyecto">
<binder>
<binding property="titulo"/>
<binding property="descripcion"/>
<binding property="ciudad"/>
</binder>
<transition on="gotoPageTwo" to="flow2"></transition>
</view-state>
<view-state id="flow2" view="flow2" model="proyecto">
<transition on="gotoPageThree" to="flow3"></transition>
<transition on="goBack" to="inicio"></transition>
</view-state>
<view-state id="flow3" view="flow3" model="proyecto">
<transition on="gotoPageFour" to="fin"></transition>
<transition on="goBack" to="flow2"></transition>
</view-state>
<end-state id="fin" view="final">
</end-state>
Это мой файл inicio.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page session="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link href="/myapp/resources/css/main.css" rel="stylesheet" type="text/css">
<link href="/myapp/resources/css/tcal.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="/myapp/resources/scripts/tcal.js"></script>
<title>Paso 1</title>
</head>
<body>
<form method="post" action="inicio.do">
<input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}">
<label>flowExecutionKey: ${flowExecutionKey}</label>
<table>
<tr>
<td>
<label class="textform">Título del proyecto</label>
</td>
<td>
<input type="text" name="titulo">
</td>
</tr>
<tr>
<td>
<label class="textform">Descripción</label>
</td>
<td>
<input type="text" name="descripcion">
</td>
</tr>
<tr>
<td>
<label class="textform">Ciudad del proyecto</label>
</td>
<td>
<input type="text" name="ciudad">
</td>
</tr>
<tr>
<td>
<input type="submit" value="Siguiente" name="_eventId=gotoPageTwo">
<%--<a href="${flowExecutionUrl}&_eventId=gotoPageTwo&_flowExecutionKey=${flowExecutionKey}"> Siguiente página</a>
<input type="submit" value="Siguiente" name="eventId=gotoPageTwo">
<input type="submit" value="Siguiente" name="${flowExecutionUrl}&_eventId=gotoPageTwo">--%>
</td>
</tr>
Как вы можете видеть, я пытаюсь отправить eventId gotoPageTwo, как указано в flow.xml.
И Spring Web Flow связан с bean-компонентами на servlet-context.xml:
<beans:bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<beans:property name="mappings">
<beans:value>inicio.do=flowController</beans:value>
</beans:property>
<beans:property name="alwaysUseFullPath" value="true"></beans:property>
</beans:bean>
<beans:bean id="flowcontroller" class="org.springframework.webflow.mvc.servlet.FlowController">
<beans:property name="flowExecutor" ref="flowExecutor"></beans:property>
</beans:bean>
<webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry"/>
<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices">
<webflow:flow-location id="inicio" path="/WEB-INF/flujos/flow.xml"/>
</webflow:flow-registry>
<webflow:flow-builder-services id="flowBuilderServices"
view-factory-creator="viewFactoryCreator"/>
<beans:bean id="viewFactoryCreator" class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
<beans:property name="viewResolvers">
<beans:list>
<beans:ref bean="viewResolver"/>
</beans:list>
</beans:property>
</beans:bean>
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
Почему это происходит? Где моя ошибка? Первая ссылка в комментариях работает и представляет второе представление, но оно не отправляет форму, я думаю, поэтому у меня нет данных, и это ссылка, а не кнопка:
<a href="${flowExecutionUrl}&_eventId=gotoPageTwo&_flowExecutionKey=${flowExecutionKey}"> Siguiente página</a>
Другие комментарии - это вещи, которые я пробовал, и они не работают.
Спасибо!
1 ответ
Вам нужно изменить код на:
<td>
<input type="submit" value="Siguiente" name="_eventId_gotoPageTwo">
</td>
Когда вы используете якорь href, вы передаете _eventId в качестве параметра и получите его _eventId=gotoPageTwo
тогда как теперь "_eventId" кодируется в поле имени кнопки, поэтому при отправке формы событие "gotoPageTwo" будет сигнализироваться в текущем состоянии потока.
Также измените форму на
<form:form method="post" modelAttribute="proyecto">