Постоянные объекты в ArrayList пропали в jspx с помощью Spring Webflow 2.0 - PullRequest
0 голосов
/ 04 июня 2011

Я пишу весенний веб-поток с MVC и средой сохраняемости Spring Roo.В этом потоке предполагается, что пользователь создает несколько экземпляров одного объекта, на который в свою очередь должны ссылаться другие объекты.Для простоты я переименую эти сущности MyClass1 и MyClass2.Мне трудно разобраться, как сохранить список постоянных сущностей, который необходим при подтверждении.

Ранее я уже публиковал вопрос по той же теме.Однако я чувствую, что редактирование исходного вопроса (даже больше) с целью дальнейшего разъяснения моей проблемы нарушило бы SO- «протокол», и поэтому я решил задать уточненную версию исходного вопроса.Оглядываясь назад, я понимаю, что первоначальный вопрос должен был быть более точным.Я, вероятно, получу немного тепла для этого, но я чувствую, что вопрос достаточно важен (по крайней мере для меня!), Чтобы ответить на него.:)

Я включил мой roo-скрипт, чтобы любой мог легко воспроизвести мои настройки.Вот оно:

project --topLevelPackage com.test.webflow
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
entity --class ~.domain.Class1 --testAutomatically 
field string --fieldName name
entity --class ~.domain.Class2 --testAutomatically 
field string --fieldName name
field reference --fieldName class1 --type ~.domain.Class1
controller scaffold --class ~.web.Class1Controller --entity ~.domain.Class1
controller scaffold --class ~.web.Class2Controller --entity ~.domain.Class2
web flow --flowName registration

Файл flow.xml в / WEB-INF / views / registration выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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">
    <on-start>
        <evaluate expression="new java.util.ArrayList()" result="flowScope.myList" result-type="java.io.Serializable"/>
    </on-start>
    <view-state id="view-state-1" view="registration/view-state-1" model="class1">
        <on-entry>
            <evaluate expression="new com.test.webflow.domain.Class1()" result="flowScope.class1"/>
        </on-entry>
        <transition on="repeat" to="view-state-1"/>
        <transition on="success" to="view-state-2"/>
        <transition on="cancel" to="end-state"/>
        <on-exit>
            <evaluate expression="class1.persist()" result="flowScope.class1"/>
            <evaluate expression="myList.add(class1)"/>
        </on-exit>
    </view-state>    
    <view-state id="view-state-2" view="registration/view-state-2">
        <transition on="cancel" to="end-state"/>
    </view-state>    
    <end-state id="end-state" view="registration/end-state"/>   
</flow>

(В реальной версии потокабыло бы другое состояние просмотра, в котором были бы зарегистрированы объекты Class2.) view-state-1.jspx выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:spring="http://www.springframework.org/tags" xmlns:form="http://www.springframework.org/tags/form" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
    <jsp:directive.page contentType="text/html;charset=UTF-8" />
    <jsp:output omit-xml-declaration="yes" />
    <spring:message var="title" code="webflow_state1_title" htmlEscape="false" />
    <util:panel id="title" title="${title}">
        <h1>${fn:escapeXml(title)}</h1>
        <p>
            <spring:message code="webflow_state1_message" />
        </p>
        <form:form commandName="class1">
            <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}" />
            <p>Enter name: <form:input path="name"/></p>
            <div class="submit">
                <spring:message var="cancel" code="button_cancel" htmlEscape="false" />
                <spring:message var="proceed" code="button_proceed" htmlEscape="false" />
                <spring:message var="repeat" code="button_repeat" htmlEscape="false" />
                <input type="submit" id="cancel" name="_eventId_cancel" value="${fn:escapeXml(cancel)}" />
                <input type="submit" id="success" name="_eventId_success" value="${fn:escapeXml(proceed)}" />
                <input type="submit" id="repeat" name="_eventId_repeat" value="${fn:escapeXml(repeat)}" />
            </div>
        </form:form>
    </util:panel>
</div>

view-state-2.jspx выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:spring="http://www.springframework.org/tags" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" xmlns:form="http://www.springframework.org/tags/form" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
    <jsp:directive.page contentType="text/html;charset=UTF-8" />
    <jsp:output omit-xml-declaration="yes" />
    <spring:message var="title" code="webflow_state2_title" htmlEscape="false" />
    <util:panel id="title" title="${title}">
        <h1>${fn:escapeXml(title)}</h1>
        <p>
            <spring:message code="webflow_state2_message" />
        </p>
        <p>
            <c:forEach var="class1" items="${myList}">
                <li><c:out value="${class1.name}"/></li>
            </c:forEach>
        </p>
    </util:panel>
</div>

Из всего, что я прочитал, я думаю, что мое решение должно работать.Тем не менее, я все еще не получаю ожидаемый результат;т. е. отпечаток каждого name -поля.Я получаю то же количество

-элементов, что и вставляю, но все они кажутся равными нулю, как объяснялось в моем предыдущем посте.Может кто-нибудь объяснить мне, почему этот код не отображает содержимое сохраненных полей Class1.name-поля?(Кстати: они появляются в CRUD.)

Заранее спасибо!

1 Ответ

1 голос
/ 05 июня 2011

DO- (Freakin') - H!Подпись Class1.persist() является public void Class1.persist(). Гм. Итак,

<evaluate expression="class1.persist()" result="flowScope.class1"/>

, по-видимому, довольно эффективно установит переменную flowScope.class1 в ноль.Удаление атрибута result решит вашу (и мою!) Проблему.:)

...