知识大全 Seam的页面逻辑实现
Posted 知
篇首语:劳动教养了身体,学习教养了心灵。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Seam的页面逻辑实现相关的知识,希望对你有一定的参考价值。
Seam的页面逻辑实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
上一篇文章 我大概地介绍一下基于Faceslet的JSF页面端的构成 接下来 是时候说一下后台逻辑的实现啦 JSF的页面逻辑是由Managed Bean(姑且译为托管BEAN)实现 所谓的 Managed Bean 就是指一些由JSF运行时(Runtime)创建与管理的普通Java对象(潮流一点的叫法——POJO)
标准JSF中Managed Bean
标准的JSF中Managed Bean是在faces config xml中通过XML定义的 例如
<managed bean> <managed bean name>helloBean</managed bean name> <managed bean class> net blogjava max seam HelloBean </managed bean class> <managed bean scope>request</managed bean scope></managed bean>
这些XML相信不用我怎么讲解大家也知道其作用啦 定义一个BEAN 无论是在Spring EJB还其它的BEAN容器(Container)中 无非都是这几个元素 BEAN的名称(或者标识 ID) JAVA类型和作用域 JSF的Managed Bean有四个作用域 如下表所示
作用域 描述 none 作用域是none的Managed Bean通常是定义一些公用的BEAN 它们的创建与存储依赖于引用它的BEAN request 在单一的HTTP请求(Request)中被创建和保持有效 session 在HTTP的会话(Session)中被创建和保持有效 可以跨请 application 存储WEB应用的Application上下文中 对于所有的请求和会话可见
可能大家对 none 作用域比较陌生 举个例子可能会好理解一点
<managed bean> <managed bean name>helloBean</managed bean name> <managed bean class> pccw jsftraining managedbean HelloBean </managed bean class> <managed bean scope>request</managed bean scope> <managed property> <property name>messageFromOtherBean</property name> <property class>java lang String</property class> <value>#messageBean</value> </managed property></managed bean><managed bean> <managed bean name>messageBean</managed bean name> <managed bean class>java lang String</managed bean class> <managed bean scope>none</managed bean scope> <value>Hello World from Another Bean!</value></managed bean>
这个例子定义了一个名为messageBean 作用域是none的Managed Bean 然后它被注入名为messageBean 作用域是request的Managed Bean中 因此 这个messageBean的作用域会跟随helloBean 同为request 另外值得一提的是 上例同样展示了如何在一个Managed Bean初始其属性(Property)的值 如何引用其它的Managed Bean
Seam中的Web Bean(相当于Managed Bean)
标准JSF的Managed Bean存在不少缺点
必须通过XML进行配置 过于麻烦
贫乏的作用域 上文提及标准的JSF的Managed Bean只有四种作用域 none request session和application 由于JSF对状态的依赖比较强 经常需要在请求之间保存应用的状态 所以很多时候我们时候都不得不使用Session作用域的Managed Bean 但是众所周知 过多地使用Session会带来很多问题 如容易造成内存耗尽 难于集群(Cluster)等
有监于此 Seam对JSF进行了扩展 并进而起草了Web Bean标准(Web Bean还在BETA阶段 坦白的说我也不是很了解) 下面我们就来学习一下Seam的Managed Bean(官方文档中叫Component) 在这方面Seam与标准JSF有如下不同
Seam的Component既可以通过XML配置 又可以通过Annotation的方式配置 我个人比较偏爱Annotation的方式 方便快捷 能够提高工作效率 XML方式有一个好处就是可以集中管理 但是因为Managed Bean配置相对比较稳定 不会经常修改 所以XML优势并不会太明显
更丰富的作用域(Seam中称为上下文Context) Seam有 种上下文可选 无状态(Stateless Context) 事件(Event Context 或者Request Context) 页面(Page Context) 对话(Conversation Context) 会话(Session Context) 业务流(Business Process Context)和应用程序(Application Context)
Seam引入一种双向注入(Binjection)的方式 所谓的双向注入就是可以将上下文中的Bean注入到另一个Bean中 又或者将Bean中的属性(Property)直接发布在上下文中
Seam的Compoenet可以直接使用EJB 的Bean
下面我们看一个简单的Component的定义的例子 package net blogjava max hello session; import jboss seam ScopeType; import jboss seam annotations Name; import jboss seam annotations Scope; @Name( helloWB ) @Scope(ScopeType PAGE) public class HelloWB private String name; private String message; public String getName() return name; public void setName(String name) this name = name; public String getMessage() return message; public void setMessage(String message) ssage = message; public void sayHello() message = Hello + name + ! ; public void anotherEvent() System out println( Another request is ing );
通过上述代码 大家可以看到有两句Annotation定义——Name和Scope 除此之外 并没有什么特别的地方 所以正是这两个Annotation使HelloWB成为一个可以被SEAM的运行时识别的Component Name用于定义Component的名称 是必须的 Scope则用于定义Component的作用域 是可选的 默认值为短对话(Short Conversation) 在本例中 HelloWB的作用域是Page Page与Conversation都Seam的杰作 在标准JSF是没有的 而且 这两个作用域是比较常用 我个人比较热衷于Page作用域 所以在这里先谈一下Page
正如我前面所说 JSF对状态的依赖比较强…… 造成我们对Session的依赖 引起了很多问题 Page很大程度上解决了这个问题 它可以跨请求存活 只要该请求不是 新的 什么请求是 新的 请求呢?要回答这个问题 先要搞清楚什么是 POST BACK 学过ASP NET的朋友可能对POST BACK概念比较熟悉 没学过的话不要紧 POST BACK并不是什么深奥的东西 所谓的POST BACK 就是指用户按下页面上的某个按钮或表单控件 将表单数据发送回到页面自身的URL 相反 如果用户是通过在地址栏中输入URL 或通过点击页面的链接访问页面 则这个请求就是一个NON POST BACK的请求 也即是一个新的请求
另外 一些JSF专家都推荐一种叫Backing Bean的风格 所谓的Backing Bean就是指一个JSF页面对应一个Managed Bean处理页面逻辑 Page作用域非常适用这种情况 因为它是与页面一起序列化(Serialize)到浏览器或保存在Session中 如果大家还是不太明白的话 请看以下的XHTML代码
<?xml version= encoding= utf ?> <!DOCTYPE PUBLIC //W C//DTD XHTML Transitional//EN transitional dtd > < xmlns= xmlns:h= > <head> <meta content= text/; charset=utf equiv= Content Type /> <title> Hello World </title> </head> <body> <h:form> <h:outputLabel value= Name: for= itName /> <h:inputText id= itName value= #helloWB name /> <h:mandButton action= #helloWB sayHello value= Say Hello /> <h:mandButton action= #helloWB anotherEvent value= Another Reqeust /> <hr /> <h > <h:outputText value= #ssage /> </h > </h:form> </body> </>
发布运行上述代码 大家可以看如下页面
在输入框中键入 max 点击 Say Hello 按钮 将请求POST BACK到Seam的组件中 由于按钮注册了组件的监听方法 所以HelloWB的sayHello方法会被调用 它将通过值绑定所得的name与 Hello 和 ! 串起来 赋给message属性 因此 响应页面会如下图所示
这时候 大家可以再点击 Another Request 按钮 出现的结果与上图一样 这就说明虽然发生了第二次请求 name与message的同样保持上一次的值 然后 大家可以再试下复制页面地址 粘贴到新窗口或新选项卡(TAB)的地址栏中 按下ENTER 你会发现页面的被重置回到最初的状态 这个例子很好地演示了POST BACK请求与NON POST BACK请求的区别
小结
cha138/Article/program/Java/ky/201311/28005相关参考
需要软件 ant jbossGA jdk jbossseamjbossseamCR 在运行实例的过程中无非是完成项目的部署以及数据库的生成 在E\\jbossseamCR(seam解压
在php编程中出现空白页面可能是由以下几个原因造成的逻辑错误逻辑错误是最难排除的从表面上看也许代码是合法的是正规的可运行起来却不是预料之中的为什么呢?也许是编写者想得不够全面毕竟人是人计算机是计算机计
基于Spring实现seam形式的事件机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Sea
Seam为JSF量身定做的应用程序框架 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JSF正开
逻辑是指事物的原因(条件)与结果的关系,即因果关系。 在数字电路中,能够实现逻辑功能的电路,就是利用电路的输入信号来反映条件,而用输出信号反映结果,从而使电路的输出与输入之间代表了一定的逻辑关系
逻辑是指事物的原因(条件)与结果的关系,即因果关系。 在数字电路中,能够实现逻辑功能的电路,就是利用电路的输入信号来反映条件,而用输出信号反映结果,从而使电路的输出与输入之间代表了一定的逻辑关系
知识大全 我想自学逻辑学,没有基础,想通过学习逻辑学提高自己的逻辑思维,请问有什么好书推荐么
我想自学逻辑学,没有基础,想通过学习逻辑学提高自己的逻辑思维,请问有什么好书推荐么?这书肯定适合您读,这书逻辑性很强,而且是那种综合的逻辑,不是西方那种象牙塔里的逻辑,不需要基础就可以看懂,但是想深入
一般锅炉设计有燃油跳闸逻辑,该逻辑中宜采用三取二逻辑处理方式的信号,是()
一般锅炉设计有燃油跳闸逻辑,该逻辑中宜采用三取二逻辑处理方式的信号,是()A、燃油跳闸阀关故障B、燃油压力低低C、燃油跳闸阀开故障D、燃油雾化蒸汽压力低参考答案:BD
一般锅炉设计有燃油跳闸逻辑,该逻辑中宜采用三取二逻辑处理方式的信号,是()
一般锅炉设计有燃油跳闸逻辑,该逻辑中宜采用三取二逻辑处理方式的信号,是()A、燃油跳闸阀关故障B、燃油压力低低C、燃油跳闸阀开故障D、燃油雾化蒸汽压力低参考答案:BD
最基本的逻辑关系有三种 (1)“与”逻辑关系:可以表述为:“当有关条件A、B、C都具备时,事件F才能发生。” “与”逻辑可用“逻辑乘法”表示,写作:F=A?B?C (2)“或”逻辑关系:可以