2013-08-20 3 views
1

Я хотел бы перечислить все, что находится в различных контекстах контекста webflow (viewScope, flowScope и т. Д.) На моих страницах JSP для целей отладки (первое приложение веб-приложения, пытаясь заставить его работать.) Но я не могу показаться получить синтаксис правильно. Может ли кто-нибудь сказать мне, как это сделать? У меня есть это в моем flow.xml:Как отобразить содержимое «flowScope» Spring Webflow в JSP?

<view-state id="createAccount" model="account"> 
    <on-render> 
     <evaluate expression="flowService.createAccount()" result="flowScope.account" /> 
    </on-render> 
    <transition on="next" to="applicationInfo" /> 
</view-state> 

и у меня есть это в моей странице JSP:

<c:forEach items="${flowScope}" var="thisFlowScope" varStatus="thisFlowScopeStatus"> 
    <label>${thisFlowScope.key}</label> 
    <span>${thisFlowScope.value}</span> 
</c:forEach> 

То, что я надеялся увидеть был «счет» атрибут/переменная распечатывается вместе с все остальное в flowScope. Вместо этого я ничего не получаю. Я попробовал различные перестановки, такие как «flowRequestContext» вместо «flowScope». С «flowRequestContext» я получаю:

javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt; 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:255) 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:219) 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:137) 
    javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:227) 

Может ли кто-нибудь сказать мне, как это сделать?

+0

Для тех, кому может потребоваться точный синтаксис, добавьте это выражение «выражение» в свой тег состояния представления: <оценить выражение = "flowRequestContext.flowScope.asMap()" result = "requestScope.flowAsMap" /> – user1071914

ответ

3

FlowScope - это MutableAttributeMap.

Вы не можете играть в это время. Вот почему работа с c:forEach не будет работать.

Однако: Вы можете распечатать всю карту с помощью ${flowRequestContext.flowScope}, но это выглядит не очень красиво.

Существует функция называется asMap унаследовали от org.springframework.binding.collection.MapAdaptable, который преобразует его в java.util.Map (который, конечно, Iterable)

+0

Спасибо! Это, кажется, ответ на проблему, но я не могу понять синтаксис вызова asMap() из выражения EL. Я получаю эту ошибку: «Функция asMap должна использоваться с префиксом, если пространство имен по умолчанию не указано». Я ненавижу быть жадным, но знаете ли вы, как это сделать? – user1071914

+0

есть. я был смущен, когда я попробовал. но вы можете сохранить вывод 'asMap' в области потока, а затем перебрать его с помощью' c: forEach' –

+0

Да, это сработало! Я должен был хранить его в отдельной переменной в определении потока (в «flow.xml»), но он действительно работал. Благодаря! – user1071914

0

добавить свои примеры на основе ответов Philipp Sander и «user1071914»:

flow.xml:

<view-state id="display" view="/WEB-INF/jsp/infoUser.jsp" model="dtoUser"> 
    <on-entry> 
     <evaluate expression="flowRequestContext.flowScope.asMap()" result="requestScope.flowAsMap" /> 
    <on-entry> 
    <transition on="next" to="checkUserAction" /> 
</view-state> 

<action-state id="checkUserAction"> 
    ... 
</action-state> 

Просмотр JSP:

<c:out value="${requestScope.flowAsMap['myvarflowScope']}" />