JSF(二) Faces Flow

前言

最近在研究JSF,是一个JavaEE的前端框架,其中有一个技术叫做Faces Flow,今天小编就给大家介绍一下faces流是个什么技术

what?

JSF技术的Faces流特性允许创建一组FlowScoped作用域页面,这个作用域大于请求作用域,但是小于会话作用域。

例子:在线商店的结账过程,我们会创建一系列页面。这一系列页面是一组自包含的页面,根据需要从一个商店转换到另一个商店。

自己的理解:感觉像是为一个流程化的需求创建一组关联的页面,我们的评教系统中的配题,faces flow就可以应用在这个需求里边,还有审批的流程等等

特点

类似于过程式编程中的子例程,表现在以下方面:

  • 与子例程类似,流有一个明确定义的入口点,参数表和返回值。不痛的是,流可以返回多个值

  • 与子例程类似,流有一个作用域,使信息只在调用流期间可用。这些信息在流的作用域之外是不可用的,而且一旦流返回,就不能使用任何资源

  • 与子例程类似,流在返回前可以调用其他流,流的调用在一个调用栈中维护:新流会在占中压入,返回则使栈弹出

组成

这里写图片描述

“流”中概念详细讲解:

  1. 流中数据:数据以流为作用域,不过通过制定参数并调用另一个流,可以从一个流向另一个流传递数据
  2. 流可以嵌套,所以如果从一个流调用另一个流,然后退出第二个流,则会返回到调用流,而不是返回到第二个流的返回节点
  3. 可以通过编程方式配置一个流,为此要创建一个有@FlowDefinition注解的类,或者可以通过使用一个配置文件来配置流。配置文件中可以只配置一个流,也可以使用faces-config.xml文件将所有流放在一起。

两个流的交互过程
这里写图片描述

在FlowA中,flow-a就是开始节点,next_a1和next_a2是另外两个页面。在next_a2页面中,用户可以使用所定义的返回节点taskFlowReturn1退出这个流,也可以调用FlowB,并传递两个参数。FlowA还定义了两个入站参数,可以从B接收。FlowB与FlowA基本上相同,只不过流和文件的名字不同。每个流都有一个相关联的托管managed bean

Demo

目录结构:

这里写图片描述


index.xhtml:开始页面,页面上的按钮导向了simple-flow.xhtml页面

<?xml version="1.0" encoding="UTF-8" ?>
<!--

    Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved.

    You may not modify, use, reproduce, or distribute this software except in
    compliance with  the terms of the License at:
    http://java.net/projects/javaeetutorial/pages/BerkeleyLicense

-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Index Page</title>
    </h:head>
    <h:body>
        <h:form prependId="false">
            <h2>Index Page</h2>

            <p><h:commandButton value="Enter Flow" action="simple-flow"/></p>
        </h:form>
    </h:body>
</html>


simple-flow.xhtml:如果没有显示流定义,与流同名的页面将作为流的开始节点。这个页面就认识是这个流的开始节点,这个页面要求输入一个流作用域值,并提供一个按钮,导航到下一个页面

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>First Page in the Flow</title>
    </h:head>
    <h:body>
        <h:form prependId="false">
            <h2>First Page in the Flow</h2>

            <p>Value: <h:inputText id="input" value="#{flowScope.value}" /></p>

            <p><h:commandButton value="Next" action="simple-flow-page2" /></p>
        </h:form>
    </h:body>
</html>



simple-flow-page2.xhtml:第二个页面,可以又任意的名字,会显示这个流的作用域值,并提供一个导航到返回页面

 <p>Value: #{flowScope.value}</p>

            <p><h:commandButton value="Return" action="simple-flow-return" /></p>

simple-flow-return.xhtml是返回页面。返回页面必须位于流之外,所以他们在不同一层的目录结构。这个页面会显示流作用域值,从而展示他没有留以外的值,并提供一个链接,导航到index.xtml页面

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Return Page</title>
    </h:head>
    <h:body>
        <h:form prependId="false">
            <h2>Return Page</h2>

            <p>Value (should be empty): 
                "<h:outputText id="output" value="#{flowScope.value}" />"</p>

            <p><h:link outcome="index" value="Back to Start" /></p>
        </h:form>
    </h:body>
</html>

这个例子之所以没有用到managedbean,是因为四个Facelets只使用流作用域数据。

网页效果

这里写图片描述

总结

其实页面上的内容都很简单,这一篇都是一些非常基础的概念,主要是认识Faces Flow是什么,由什么组成,以后博客中会举一些更加复杂的实例

注:Demo来自javaee官网
请点击获取更多信息

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值