Spring webflow 1.0 — Загрузка файла

Я использую Spring WebFlow 1.0. Я загружаю CSV-файл, анализирую его и вывожу результаты, прежде чем продолжить. У пользователя есть возможность загрузить CSV-файл, содержащий записи, не прошедшие проверку. Когда я щелкаю ссылку в JSP, чтобы загрузить этот файл, веб-поток вызывает действие формы. Действие формы записывает файл, получая выходной поток из ответа:

HttpServletResponse response = ((ServletExternalContext) context.getExternalContext()).getResponse();

Я не хочу покидать JSP, на котором сейчас работаю. Я просто хочу скачать файл. Другими словами, я не хочу переходить в другое состояние. Я просто хочу обслуживать динамически отображаемый файл. Все работает (со страницы не ухожу, а файл скачиваю), но в консоли получаю следующую ошибку:

_pEncydKfggPHJo8=org.springframework.webflow.engine.NoMatchingTransitionException: No transition was matched on the event(s) signaled by the [1] action(s) that executed in this action state 'downloadErrorReportAction' of flow 'myFlow'; transitions must be defined to handle action result outcomes -- possible flow configuration error? Note: the eventIds signaled were: 'array<String>[[null]]', while the supported set of transitional criteria for this action state is 'array<TransitionCriteria>[[empty]]'
    at org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:187)
    at org.springframework.webflow.engine.State.enter(State.java:191)
    at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
    at org.springframework.webflow.engine.TransitionableState.onEvent(TransitionableState.java:107)
    at org.springframework.webflow.engine.Flow.onEvent(Flow.java:534)
    Truncated. see log file for complete stacktrace

Вот соответствующая часть моей конфигурации веб-потока.

<view-state id="showUploadResults" view="UploadResults3.0">
    <render-actions>
        <action bean="UploadResultsAction" method="transitionToWebflow"/>
        <action bean="UploadResultsAction" method="setupData"/>
    </render-actions>
    <transition on="submit" to="proceed"/>
    <transition on="downloadErrorReport" to="downloadErrorReportAction"/>
</view-state>

<action-state id="downloadErrorReportAction">
    <action bean="UploadResultsAction" method="downloadErrorReport" name="downloadErrorReport"/>
</action-state>

person Dave    schedule 16.06.2010    source источник


Ответы (1)


Я смог сделать это, определив состояние просмотра и указав действие рендеринга.

<view-state id="downloadErrorReportAction">
        <render-actions>
            <action bean="uploadResultsAction" method="downloadErrorReport" name="downloadErrorReport"/>
        </render-actions>
    </view-state>

Мне также пришлось добавить те же самые переходы из предыдущего действия, потому что, как только вы нажмете на ссылку для скачивания, вы перейдете в другое состояние. Итак, окончательный конфиг выглядит следующим образом:

<view-state id="showUploadResults" view="UploadResults3.0">
   <render-actions>
      <action bean="UploadResultsAction" method="transitionToWebflow"/>
      <action bean="UploadResultsAction" method="setupData"/>
   </render-actions>
   <transition on="submit" to="proceed"/>
   <transition on="downloadErrorReport" to="downloadErrorReportAction"/>
</view-state>

<view-state id="downloadErrorReportAction">
     <render-actions>
         <action bean="uploadResultsAction" method="downloadErrorReport" name="downloadErrorReport"/>
     </render-actions>
    <transition on="submit" to="proceed"/>
</view-state>
person Dave    schedule 17.06.2010
comment
Кто-нибудь знает лучший способ сделать это. Это кажется немного хакерским. - person Dave; 17.06.2010