用JSF与BEEHIVE PAGE FLOW开发WEB应用 (2)
从后台bean引发页面流动作
在上面的“基本集成”部分,我们直接从JSF组件引发页面流动作。通常情况下,只需这样即可;当单击一个按钮或者链接时,会运行一个动作并跳转到另一个页面上。如果想在调用控制器之前运行一些与页面相关的代码,或者如果希望页面可以在几个动作之间进行动态选择的话,可以在命令处理程序(JSF页面所运行的一个Java方法)中引发一个动作。下面是一个命令处理程序的例子,可以把它放到后台bean page2.java中(或者其它任何可公开访问的bean中):
public StringchooseNextPage(){ return "goPage3";}
这是一个非常简单的命令处理程序,它选择了goPage3动作。可以用标准的JSF方式从一个JSF命令组件绑定到这个命令处理程序:
当单击链接时,会运行chooseNextPage命令处理程序,它会选择引发goPage3动作。还可以对命令处理程序方法使用一个特殊的页面流注释――@Jpf.CommandHandler:
@Jpf.CommandHandler( raiseActions={ @Jpf.RaiseAction(action="goPage3") })public String chooseNextPage(){ return "goPage3";}
该注释使支持Beehive的工具可以知道命令处理程序引发了后台bean中的哪个动作,并允许扩展JSF动作处理的能力(参见下面“从JSF页面向页面流发送数据”部分)。
从后台bean访问当前页面流或共享流
在某些情况下,您或许想直接从后台bean访问当前页面流或一个活动的共享流。为此,只需创建一个适当类型的字段,并使用@Jpf.PageFlowField或@Jpf.SharedFlowField对其进行适当注释:
@Jpf.CommandHandler( raiseActions={ @Jpf.RaiseAction(action="goPage3") })public String chooseNextPage(){ return "goPage3";}
这些字段将在创建后台bean的时候被初始化。无需手动对其进行初始化。下面的例子使用了自动初始化的ExampleController字段。在这个例子中,“show hints”单选钮的事件处理程序在页面流中设置了一个普通优先级。
@Jpf.PageFlowFieldprivate ExampleController myController;@Jpf.SharedFlowField(name="sharedFlow2") // "sharedFlow2" is a // name defined in the // page flow controllerprivate ExampleSharedFlow mySharedFlow; 字串7
在很多情况下,页面不需要直接与页面流或者共享流进行交互;使用其它方法从页面流向JSF页面传递数据就足够了,反之亦然。下面我将给出一些例子。
从页面流控制器访问后台bean
您不能从页面流控制器访问后台bean!至少,这不容易做到,这是有意为之的。后台bean与JSF页面紧密相关,当您离开页面的时候,后台bean会被销毁。正如页面流控制器不应了解页面细节一样,它也不应了解后台bean。当然了,可以从后台bean向控制器传递数据(稍后将会介绍),甚至可以传递后台bean实例本身,但是在大多数情况下,后台bean的内容是不应当泄露给控制器的。
生命周期方法
通常,当后台bean发生某些事情的时候,比如当它被创建或销毁时,我们希望能运行代码。在Page Flow框架的生命周期中,它会对后台bean调用一些方法:
onCreate():创建bean时
onDestroy():销毁bean时(从用户会话移除)
onRestore():这个需要详细解释一下。我说过,当您离开页面的时候,后台bean会被销毁。在大多数情况下是这样的,但是如果页面流使用了navigateTo特性(它使您可以再次访问先前显示的页面),在您离开页面之后,Page Flow框架会保留后台bean一小段时间,以防它需要还原。当通过@Jpf.Forward或@Jpf.SimpleAction使用navigateTo=Jpf.NavigateTo.currentPage或navigateTo=Jpf.NavigateTo.previousPage还原一个JSF页面时,页面的组件树及其后台bean都被Page Flow框架还原。当这种情况发生时,onRestore()就被调用。
不管要在哪个时期运行代码,只需重写适当的方法:
protected void onCreate(){ /*some create-time logic */}
当重写这些方法时,不需要调用空的super版本。
在JSF页面和页面流之间传递数据
现在我们该看看如何在JSF页面和页面流之间传递数据了。
从页面流向JSF页面发送数据
通常,您会想要利用页面流的数据来初始化一个页面。为此,可以向page2.faces的Forward添加“action outputs”:
@Jpf.Action( forwards={ @Jpf.Forward( name="success", path="page2.faces", actionOutputs={ @Jpf.ActionOutput(name="message", type=String.class,required=true) } ) })public Forward goPage2(){ Forward fwd = new Forward("success"); fwd.addActionOutput("message", "Got the message."); return fwd;}
做完这些之后,可以直接从JSF页面或者后台bean将该值作为页面输入来访问。(如果您不喜欢键入冗长的注释,可以省去斜体的。它们主要用于再次检查添加的对象类型是否正确,确定不缺失类型。)
在上面的“基本集成”部分,我们直接从JSF组件引发页面流动作。通常情况下,只需这样即可;当单击一个按钮或者链接时,会运行一个动作并跳转到另一个页面上。如果想在调用控制器之前运行一些与页面相关的代码,或者如果希望页面可以在几个动作之间进行动态选择的话,可以在命令处理程序(JSF页面所运行的一个Java方法)中引发一个动作。下面是一个命令处理程序的例子,可以把它放到后台bean page2.java中(或者其它任何可公开访问的bean中):
public StringchooseNextPage(){ return "goPage3";}
这是一个非常简单的命令处理程序,它选择了goPage3动作。可以用标准的JSF方式从一个JSF命令组件绑定到这个命令处理程序:
当单击链接时,会运行chooseNextPage命令处理程序,它会选择引发goPage3动作。还可以对命令处理程序方法使用一个特殊的页面流注释――@Jpf.CommandHandler:
@Jpf.CommandHandler( raiseActions={ @Jpf.RaiseAction(action="goPage3") })public String chooseNextPage(){ return "goPage3";}
字串9
该注释使支持Beehive的工具可以知道命令处理程序引发了后台bean中的哪个动作,并允许扩展JSF动作处理的能力(参见下面“从JSF页面向页面流发送数据”部分)。
从后台bean访问当前页面流或共享流
在某些情况下,您或许想直接从后台bean访问当前页面流或一个活动的共享流。为此,只需创建一个适当类型的字段,并使用@Jpf.PageFlowField或@Jpf.SharedFlowField对其进行适当注释:
@Jpf.CommandHandler( raiseActions={ @Jpf.RaiseAction(action="goPage3") })public String chooseNextPage(){ return "goPage3";}
这些字段将在创建后台bean的时候被初始化。无需手动对其进行初始化。下面的例子使用了自动初始化的ExampleController字段。在这个例子中,“show hints”单选钮的事件处理程序在页面流中设置了一个普通优先级。
@Jpf.PageFlowFieldprivate ExampleController myController;@Jpf.SharedFlowField(name="sharedFlow2") // "sharedFlow2" is a // name defined in the // page flow controllerprivate ExampleSharedFlow mySharedFlow; 字串7
在很多情况下,页面不需要直接与页面流或者共享流进行交互;使用其它方法从页面流向JSF页面传递数据就足够了,反之亦然。下面我将给出一些例子。
从页面流控制器访问后台bean
您不能从页面流控制器访问后台bean!至少,这不容易做到,这是有意为之的。后台bean与JSF页面紧密相关,当您离开页面的时候,后台bean会被销毁。正如页面流控制器不应了解页面细节一样,它也不应了解后台bean。当然了,可以从后台bean向控制器传递数据(稍后将会介绍),甚至可以传递后台bean实例本身,但是在大多数情况下,后台bean的内容是不应当泄露给控制器的。
生命周期方法
通常,当后台bean发生某些事情的时候,比如当它被创建或销毁时,我们希望能运行代码。在Page Flow框架的生命周期中,它会对后台bean调用一些方法:
onCreate():创建bean时
onDestroy():销毁bean时(从用户会话移除)
onRestore():这个需要详细解释一下。我说过,当您离开页面的时候,后台bean会被销毁。在大多数情况下是这样的,但是如果页面流使用了navigateTo特性(它使您可以再次访问先前显示的页面),在您离开页面之后,Page Flow框架会保留后台bean一小段时间,以防它需要还原。当通过@Jpf.Forward或@Jpf.SimpleAction使用navigateTo=Jpf.NavigateTo.currentPage或navigateTo=Jpf.NavigateTo.previousPage还原一个JSF页面时,页面的组件树及其后台bean都被Page Flow框架还原。当这种情况发生时,onRestore()就被调用。
字串3
不管要在哪个时期运行代码,只需重写适当的方法:
protected void onCreate(){ /*some create-time logic */}
当重写这些方法时,不需要调用空的super版本。
在JSF页面和页面流之间传递数据
现在我们该看看如何在JSF页面和页面流之间传递数据了。
从页面流向JSF页面发送数据
通常,您会想要利用页面流的数据来初始化一个页面。为此,可以向page2.faces的Forward添加“action outputs”:
@Jpf.Action( forwards={ @Jpf.Forward( name="success", path="page2.faces", actionOutputs={ @Jpf.ActionOutput(name="message", type=String.class,required=true) } ) })public Forward goPage2(){ Forward fwd = new Forward("success"); fwd.addActionOutput("message", "Got the message."); return fwd;}
做完这些之后,可以直接从JSF页面或者后台bean将该值作为页面输入来访问。(如果您不喜欢键入冗长的注释,可以省去斜体的。它们主要用于再次检查添加的对象类型是否正确,确定不缺失类型。)
字串3
Tags:
责任编辑:您的评论
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
精彩推荐
最新资讯


您的位置: