【问题标题】:How to display the content of Spring Webflow's "flowScope" in a JSP?如何在 JSP 中显示 Spring Webflow 的“flowScope”的内容?
【发布时间】:2013-08-22 17:49:42
【问题描述】:

我想在我的 JSP 页面上列出各种 webflow 上下文范围(viewScope、flowScope 等)中的所有内容以进行调试(第一个 webflow 应用程序,试图让它工作。)但我似乎无法获得正确的语法。谁能告诉我该怎么做?我的 flow.xml 中有这个:

<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)

谁能告诉我怎么做?

【问题讨论】:

  • 对于那些可能需要确切语法的人,请将此“评估”表达式添加到您的视图状态标记中:

标签: java jsp spring-webflow


【解决方案1】:

flowScope 是MutableAttributeMap

你不能重复它。这就是为什么使用 c:forEach 不起作用的原因。

但是: 您可以使用${flowRequestContext.flowScope} 打印整个地图,但这看起来并不漂亮。

有一个名为 asMap 的函数继承自 org.springframework.binding.collection.MapAdaptable,它将其转换为 java.util.Map(当然是可迭代的)

【讨论】:

  • 谢谢!这似乎是问题的答案,但我无法弄清楚从 EL 表达式调用 asMap() 的语法。我收到此错误:“未指定默认命名空间时,函数 asMap 必须与前缀一起使用。”我讨厌贪婪,但你知道怎么做吗?
  • 是的。我尝试的时候很困惑。但是您可以将asMap 的输出存储在流范围内,然后使用c:forEach 对其进行迭代
  • 是的,这行得通!我必须将它存储在流定义中的一个单独变量中(在“flow.xml”中),但它确实有效。谢谢!
  • 很高兴能帮到你
【解决方案2】:

我根据 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']}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 2014-04-23
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多