标签: spring-webflow-2

无法找到元素'flow'的Spring NamespaceHandler

我正在使用SpringSource Tool Suite开发一个spring webflow(2.0.7)项目.我正在尝试设置基本流程.

我的someflow.xml看起来像这样:

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

             <!- view-state declarations -->
    </flow>
Run Code Online (Sandbox Code Playgroud)

在STS工具(eclipse上的Spring IDE)中,我在流schemaLocation附近看到一条警告消息:

无法为模式名称空间'http:// www.springframework.org/schema/webflow'的元素'flow'找到Spring NamespaceHandler

然后当tomcat启动时,我收到错误

org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:无法找到XML架构命名空间的Spring NamespaceHandler [ http://www.springframework.org/schema/webflow] 攻击资源:ServletContext资源[/ WEB-INF /流/ someflow.xml]

  • 我google了一段时间,一些帖子表明问题是spring-webflow jar不在类路径中.在我的例子中,springsource工具创建了模板,所有的jar都到位了.我也手动检查了它们.所以这不是问题

  • 这篇文章http://forum.springsource.org/archive/index.php/t-49098.html中的一条建议是拼接罐子!这不是一个解决方案,但我试图看看它是否修复了它.但不是.

现在被困......其他人是否面临这个问题?

spring spring-webflow spring-webflow-2

5
推荐指数
1
解决办法
1338
查看次数

Spring Web Flow - 如何使用conversationScope中已有的值设置单元测试?

我正在使用Spring Web Flow 2.0开发一个项目.

我试图对以决策状态开始的流进行单元测试.决策状态检查对象上的对象的值conversationScope.我无法弄清楚如何conversationScope在单元测试中插入一个值.

我试过了:

getConversationScope().put("someName", value);
MockExternalContext context = new MockExternalContext();
startFlow(context);
Run Code Online (Sandbox Code Playgroud)

但是,似乎当我调用startFlow(context)该值时会被清除.

我也尝试过:

MockExternalContext context = new MockExternalContext();
setCurrentState("someDecisionState");
resumeFlow(context)
Run Code Online (Sandbox Code Playgroud)

但是测试失败并且错误地告诉我,我无法从决策状态恢复,只能从视图状态恢复.

有谁知道如何插入模拟值,conversationScope以便我可以测试这些情况?

java spring-webflow spring-webflow-2

4
推荐指数
1
解决办法
4029
查看次数

验证grails submitButton

是否可以使用javascript创建验证,以便在grails' <g:submitButton>标签的onCLick属性上实现?我正在使用Webflow从一个页面进入另一个页面.这是我的下一步按钮的代码:

 <g:submitButton class="btn btn-primary" name="next" value="Next" onclick="return isfilipinoCitizen()"></g:submitButton>  
Run Code Online (Sandbox Code Playgroud)

isfilipinoCitizen函数可以在我的javascript代码中找到:

                <script type="text/Javascript">                      
                function isfilipinoCitizen() {    
                  var selected = "${accountInfo?.filipinoCitizen}";
                      if(selected == "1"){
                          return true;
                      }else{
                          alert(selected)
                          alert("You must be a Filipino citizen to register!")
                          document.location.href = "myhomepage";
                      }
                }
                </script>
Run Code Online (Sandbox Code Playgroud)

我想在这里做的是,如果用户的输入为0,则阻止页面进入下一页,并将用户重定向到系统的主页.但它似乎根本不起作用.

你们的任何帮助都非常感谢.

谢谢!

grails button spring-webflow-2

4
推荐指数
1
解决办法
7515
查看次数

Spring Web Flow 请求映射

我正在将 Spring Web Flow 2 添加到当前不使用 Spring MVC 或 Web Flow 的非常大的现有 Web 应用程序中。我的任务是通过访问 mySite.com/flows 来触发 Web Flow,但我遇到了困难。我的方法是设置 DispatcherServlet,/flows/*并将 Web Flow映射到/flows. 这是我的 web.xml,其中配置了 DispatcherServlet:

<servlet>
    <servlet-name>flow</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/flowContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>flow</servlet-name>
    <url-pattern>/flows/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法来让 Web Flow 映射到/flows. 我的第一次尝试是使用带有base-path设置的流注册表:

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="/WEB-INF/app/flows">
    <webflow:flow-location-pattern value="**/*-flow.xml" />
</webflow:flow-registry>
Run Code Online (Sandbox Code Playgroud)

我的理解是,这将采用内部的文件夹结构/WEB-INF/app/flows来创建请求映射。我的第一个测试是booking-flow.xml在名为booking( /WEB-INF/app/flows/booking)的子文件夹中添加我的流程。而且,太棒了!- 它按预期工作。我能够从 mySite.com/flows/booking 访问流程。好的,但我不想/booking在 URL 中,所以我将其booking-flow.xml移出booking文件夹,然后直接进入WEB-INF/app/flows并期望它对我有用,但它没有 …

mapping spring spring-mvc spring-webflow-2

4
推荐指数
1
解决办法
8068
查看次数

我可以在Spring MVC控制器中获取当前的Webflow状态吗?

从表面上看,有点奇怪的问题!但我正在创建一个使用webflow和传统Spring MVC控制器的Web应用程序.

从其中一个Webflow视图中,http请求(ajax)从客户端发送到spring控制器.当它最初被编码时,它与webflow没有很多逻辑连接,但现在事情已经开始,控制器可以真正知道请求来自哪个屏幕(视图状态).

我的控制器方法签名如下所示:

@RequestMapping(value="/AjaxStuff", method=RequestMethod.POST)
public String ajaxStuff(@ModelAttribute("quote") QB2MotorQuote p_quote, BindingResult p_bindingResult, 
        HttpServletRequest p_req, Model p_model, DefaultMessageContext p_messages) {
Run Code Online (Sandbox Code Playgroud)

我从一些webflow动作类中了解到,我可以从RequestContext对象获取当前状态:

public Event checkDeclines(RequestContext p_ctx) throws Exception {
    // get the current state
    StateDefinition state = p_ctx.getCurrentState();
Run Code Online (Sandbox Code Playgroud)

我从来没有真正理解Spring所做的'voodoo':)只需在方法签名上指定它们就可以自动注入参数(当然它只能注入它知道的东西??).我试过简单地改变我的控制器方法的方法签名来注入RequestContext(徒劳地希望它会被注入),但事实并非如此.它抱怨RequestContext是一个接口.

所以,有没有人知道如何让我的控制器知道当前的webflow状态 - 通过注入控制器方法签名中的东西,或者我可以从某种方式从http请求中获取它(或者我可以从请求获得的会话) ).

任何帮助都非常感谢.

java spring spring-mvc spring-webflow-2

4
推荐指数
1
解决办法
4742
查看次数

从Spring Web流程中的GE​​T中读取查询字符串

HY.

我使用执行密钥继续弹簧网络流程.(订单paypal付款),并需要从get读取查询字符串.&TokenID和&PayerID

以下是Paypal在确认付款后重定向用户的方式:

/sampleflow?execution=e1s1&_eventId=approved&token=EC5D7416956W8431713&PayerID=TN2RE8ZTH67JN
Run Code Online (Sandbox Code Playgroud)

如果eventID被批准,我的流程将重定向到付款已确认状态.这部分正在运作.我只需要以某种方式获取查询字符串参数.

有什么办法吗?

spring spring-mvc java-ee spring-webflow spring-webflow-2

4
推荐指数
1
解决办法
5517
查看次数

Spring webflow - 如何在evaluate表达式中传递会话?

我正在使用spring webflow,但是我需要在一个使用transition ==> evaluate表达式访问的方法中访问我的HttpSession.(所以在包含我的流的xml文件中)到目前为止,我还没有找到一种方法将它实际传递给我的方法.我已经看了一下flowrequestcontext,但到目前为止我还没有找到方法.

spring-webflow spring-webflow-2

3
推荐指数
2
解决办法
1万
查看次数

spring webflow中的_eventId无效

有没有办法在spring webflow中处理发生的eventId或没有eventId参数?

例如,对于此webflow

<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">
    <view-state id="welcome">
        <transition on="goForward" to="nextStep"/>
    </view-state>
    <view-state id="nextStep">
        <transition on="endFlow" to="finishStep" />
    </view-state>
    <end-state id="finishStep"/>    
    <global-transitions>
        <transition on="cancel" to="finishStep"/>
    </global-transitions>
</flow>
Run Code Online (Sandbox Code Playgroud)

如何使用param like处理请求_eventId=unexistingAction或没有_eventIdparam的请求?这通常会产生一个带有堆栈跟踪的页面......

no transition found on occurence of event in state of flow...
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc spring-webflow-2 event-id

3
推荐指数
1
解决办法
1396
查看次数

Spring Webflow - 从列表中删除项目?

我在应用程序中使用Webflow 2.3.2,用户可以在一步中添加/删除绑定模型对象中的列表(它们只是在修改后返回到当前步骤).例如,我的对象可能如下所示:

public class MyInfo implements Serializable {
    List<String> myList = new ArrayList<String>();
}
Run Code Online (Sandbox Code Playgroud)

在webflow中执行"添加"没有问题,因为我只是将新对象粘贴在列表的末尾,但对于"删除",我需要识别要删除的元素.我现在正在做的是使用"currentEvent"预定义的EL对象并获取原始事件"value",我已使用要删除的记录的ID填充该值.我想知道是否有更优雅的方式来做到这一点,因为这似乎走了很长的路. 谁能建议更好的方法呢? 这是我现在正在做的事情的例证:

我的JSP文件(注意"删除"按钮):

<c:forEach items="${myInfo.myList}" var="listItem" varStatus="listItemStatus">
    <c:set var="v" value="${listItemStatus.index}"/>
    <div><form:input id="listItemValue_${v}" path="myInfo.myList[${v}]"/></div>
    <div><button id="deleteItem_${v}" name="_eventId_deleteItem" type="submit" value="${v}">Delete This Item</button></div>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

我的"flow.xml"文件:

<transition on="deleteItem"  bind="false" validate="false">
    <evaluate expression="flowService.deleteItem(flowScope.myInfo, currentEvent.attributes)"  result="flowScope.myInfo"  />
</transition>
Run Code Online (Sandbox Code Playgroud)

我的事件处理程序

public MyInfo deleteAccount(MyInfo myInfo, LocalAttributeMap currentEvent) {
    myInfo.getMyList().remove(Integer.valueOf((String)(currentEvent.asMap().get("_eventId_deleteItem"))).intValue());
    return myInfo;
}
Run Code Online (Sandbox Code Playgroud)

spring spring-webflow spring-webflow-2

3
推荐指数
1
解决办法
2524
查看次数

Spring web flow如何在从流退出到外部重定向时添加flash属性

我是 Spring Web Flow (2.3.1) 的新手,这就是我想要做的:

我有一个 JSP 页面,它在页面底部为页面顶部选择的作者列出了一个分页的书籍表。我在顶部的“添加图书”(就在作者下拉列表下方)有一个按钮/链接,单击它会启动一个 Spring 网络流,该流将转到一个页面,用户可以在其中输入图书的详细信息,如步骤 1、2 和 3(在 3 个不同的视图/页面中)。单击“保存”会创建新书,并应将用户带回带有分页书籍列表的视图。

现在,我想在 Save 操作之后添加一个 flash 属性(成功消息)并将用户带回 Books 页面(分页),预先选择“上一个”作者并显示成功消息。

我有以下最终状态的 Web 流 XML:

<end-state id="home" view="externalRedirect:/books/" >
    <output name="author" value="book.author" />
</end-state>
Run Code Online (Sandbox Code Playgroud)

我执行 externalRedirect 的原因是我希望 URL 读起来就像用户在添加新书后刚刚点击了 Books 列表页面一样。如果我不进行重定向而是指向tiles.xml 中的视图名称,我会正确地看到Flash 消息,但URL 仍显示Web 流,例如?execution=e1s1。在这两种情况下,都不会自动选择作者。

如何在重定向后保留 Flash 成功消息和作者选择?

output变量在外部重定向中是否有任何意义?

我还在保存操作中设置以下内容:

    requestContext.getFlowScope().put("authorId", book.getAuthorId());
Run Code Online (Sandbox Code Playgroud)

java jsp tiles spring-mvc spring-webflow-2

3
推荐指数
1
解决办法
2919
查看次数