我正在使用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 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以便我可以测试这些情况?
是否可以使用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,则阻止页面进入下一页,并将用户重定向到系统的主页.但它似乎根本不起作用.
你们的任何帮助都非常感谢.
谢谢!
我正在将 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并期望它对我有用,但它没有 …
从表面上看,有点奇怪的问题!但我正在创建一个使用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请求中获取它(或者我可以从请求获得的会话) ).
任何帮助都非常感谢.
HY.
我使用执行密钥继续弹簧网络流程.(订单paypal付款),并需要从get读取查询字符串.&TokenID和&PayerID
以下是Paypal在确认付款后重定向用户的方式:
/sampleflow?execution=e1s1&_eventId=approved&token=EC5D7416956W8431713&PayerID=TN2RE8ZTH67JN
Run Code Online (Sandbox Code Playgroud)
如果eventID被批准,我的流程将重定向到付款已确认状态.这部分正在运作.我只需要以某种方式获取查询字符串参数.
有什么办法吗?
我正在使用spring webflow,但是我需要在一个使用transition ==> evaluate表达式访问的方法中访问我的HttpSession.(所以在包含我的流的xml文件中)到目前为止,我还没有找到一种方法将它实际传递给我的方法.我已经看了一下flowrequestcontext,但到目前为止我还没有找到方法.
有没有办法在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) 我在应用程序中使用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 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)