网站管理助手ftp连接不上,百度h5制作,东莞人才市场现场招聘会地址,驻马店做网站推广在本教程中#xff0c;我们将向您展示如何在Web应用程序中创建和使用ConversationScoped Bean。 在CDI中#xff0c;bean是定义应用程序状态和/或逻辑的上下文对象的源。 如果容器可以根据CDI规范中定义的生命周期上下文模型来管理其实例的生命周期#xff0c;则Java EE组件… 在本教程中我们将向您展示如何在Web应用程序中创建和使用ConversationScoped Bean。 在CDI中bean是定义应用程序状态和/或逻辑的上下文对象的源。 如果容器可以根据CDI规范中定义的生命周期上下文模型来管理其实例的生命周期则Java EE组件就是Bean。 ConversationScoped Bean是一个bean其作用域描述了用户与JavaServer Faces应用程序的交互作用该作用域位于显式的开发人员控制的边界内该边界将作用域扩展到JavaServer Faces生命周期的多次调用中。 所有长时间运行的对话都限于特定的HTTP Servlet会话并且可能不会跨越会话边界。 使用ConversationScoped Bean我们可以从ViewScoped JSF Bean中获得所需的相同功能。 此外借助ConversationScoped Bean我们可以在不同的页面请求之间维护相同的对话或状态。 但是当我们不进行对话时托管Bean将保持活动状态直到超时。 在这里我们将创建一个使用ConversationScoped bean的JFS Web应用程序以实现客户机与服务器之间的对话。 客户端将通过导航到不同的页面来向服务器发出多个请求以显示Bean如何保持状态。 我们首选的开发环境是Eclipse 。 我们正在使用Eclipse Juno4.2版本以及Maven Integration插件版本3.1.0。 您可以从Eclipse的这里从和Maven Eclipse插件这里 。 用于Eclipse的Maven插件的安装不在本教程的讨论范围内因此将不予讨论。 Tomcat 7是使用的应用程序服务器。 让我们开始 1.创建一个新的Maven项目 转到文件-项目- Maven- Maven项目。 在向导的“选择项目名称和位置”页面中确保未选中 “创建简单项目跳过原型选择”选项单击“下一步”以继续使用默认值。 在这里必须添加用于创建Web应用程序的Maven原型。 单击“添加原型”并添加原型。 将“ Archetype组ID”变量设置为org.apache.maven.archetypes 将“ Archetype构件ID”变量设置为maven-archetype-webapp 将“ Archetype版本”设置为1.0 。 点击“确定”继续。 在向导的“输入工件ID”页面中您可以定义项目的名称和主程序包。 将“ Group Id”变量设置为com.javacodegeeks.snippets.enterprise 将“ Artifact Id”变量设置为cdibeans 。 上述选择组成主体工程包作为com.javacodegeeks.snippets.enterprise.cdibeans和项目名称为cdibeans 。 将“ Package”变量设置为war 以便创建一个war文件以部署到tomcat服务器。 点击“完成”退出向导并创建您的项目。 Maven项目结构如下所示 它包含以下文件夹 / src / main / java文件夹其中包含应用程序动态内容的源文件 / src / test / java文件夹包含用于单元测试的所有源文件 / src / main / resources文件夹包含配置文件 / target文件夹包含已编译和打包的可交付成果 / src / main / resources / webapp / WEB-INF文件夹包含Web应用程序的部署描述符 pom.xml是项目对象模型POM文件。 包含所有项目相关配置的单个文件。 2.添加所有必要的依赖项 您可以通过在POM编辑器的“ Pom.xml”页面上对其进行编辑来在Maven的pom.xml文件中添加依赖项如下所示 pom.xml project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.javacodegeeks.snippets.enterprise.cdi/groupIdartifactIdcdibeans/artifactIdpackagingwar/packagingversion0.0.1-SNAPSHOT/versionnamecdibeans Maven Webapp/nameurlhttp://maven.apache.org/urldependenciesdependencygroupIdorg.jboss.weld.servlet/groupIdartifactIdweld-servlet/artifactIdversion1.1.10.Final/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.2/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.0.1/versionscopeprovided/scope/dependencydependencygroupIdorg.glassfish/groupIdartifactIdjavax.faces/artifactIdversion2.1.7/version/dependency/dependenciesbuildfinalNamecdibeans/finalName/build
/project 如您所见Maven以声明方式管理库依赖关系。 创建本地存储库默认情况下位于{user_home} /。m2文件夹下所有必需的库都从公共存储库下载并放置在该库中。 此外库内的依赖关系会自动解决和处理。 3.创建ConversationScoped Bean CDIConversationScopedBean.java类是一个ConversationScoped Bean其注释为ConversationScoped 。 在容器中为它指定了cDIConversationScopedBean名称并带有Named批注。 首先该类必须实现Serializable接口以便成为ConversationScoped托管bean。 它还必须使用带有Inject批注的Conversation接口该接口被注入到bean中。 甲Conversation实例在bean注入以便允许通过标记当前对话作为瞬时或长期运行并指定一个会话标识符会话的唯一标识符来管理对话上下文中的应用。 该类具有String属性称为message 该属性具有getter和setter方法。 带有PostConstruct注释的init()方法是在创建bean并initializes message属性时调用的方法。 initConversation()和endConversation()是开始和结束对话的工具。 所述initConversation()方法标记瞬时conversation作为长期运行而endConversation()方法马克长期运行的conversation为瞬态返回到应用程序的初始页。 如果在JSF请求结束时会话处于过渡状态则它将被销毁并且会话上下文也将被销毁。 如果在JSF请求结束时会话处于长期运行状态则不会破坏该会话。 而是它可以传播到其他请求。 所有长时间运行的对话都有一个字符串值的唯一标识符。 该类还有另外两个方法由客户端通过页面调用这将在后面显示。 CDIConversationScopedBean.java package com.javacodegeeks.snippets.enterprise.cdibeans;import java.io.Serializable;
import java.util.Random;import javax.annotation.PostConstruct;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;Named(valuecDIConversationScopedBean)
ConversationScoped
public class CDIConversationScopedBean implements Serializable {private static final long serialVersionUID -6541718762358561835L;Injectprivate Conversation conversation;private String message;private String[] words {Hello!!,Have a nice day!!,Goodbye..,Hi!,Goodmorning!,Bye..,Good evening..}; public String getMessage() {return message;}public void setMessage(String message) {this.message message;}public Conversation getConversation() {return conversation;}PostConstructpublic void init(){message Hello from the JavaCodeGeeks..;}public void initConversation(){if (!FacesContext.getCurrentInstance().isPostback() conversation.isTransient()) {conversation.begin();}}public void sendMessage(){message words[new Random().nextInt(7)];}public String next(){return secondpage?faces-redirecttrue;}public String endConversation(){if(!conversation.isTransient()){conversation.end();}return firstpage?faces-redirecttrue;}}4.创建页面 第一页是初始页面客户端将调用该初始页面以开始对话。 它设置PreRenderViewEvent 在显示页面之前PreRenderViewEvent 。 PreRenderViewEvent调用Bean的initConversation()方法以将对话标记为长时间运行。 该页面显示了bean的message属性每次单击“获取您的消息”按钮时 message都会更改。 通过单击“继续此消息”命令链接将调用bean的next()方法并将客户端重定向到第二页。 firstPage.xhtml !DOCTYPE html
html xmlnshttp://www.w3.org/1999/xhtmlxmlns:hhttp://java.sun.com/jsf/htmlxmlns:fhttp://java.sun.com/jsf/core
f:event listener#{cDIConversationScopedBean.initConversation}typepreRenderView/f:event
h:headtitleJCG conversation 1/title
/h:head
h:bodyh:outputText valueStarting conversation/h:outputTextbr /br /h:formh:outputText value#{cDIConversationScopedBean.message}/h:outputTextbr /h:commandButton valueGet your message typesubmitf:ajax executeformlistener#{cDIConversationScopedBean.sendMessage} renderform //h:commandButtonbr /br /h:commandLink action#{cDIConversationScopedBean.next}valueContinue with this message //h:form
/h:body
/html 第二页再次显示message值它是客户端在上一页中选择的message值。 通过单击“让我们结束对话”链接客户端现在被重定向到第三页。 secondPage.xhtml !DOCTYPE html
html xmlnshttp://www.w3.org/1999/xhtmlxmlns:hhttp://java.sun.com/jsf/htmlxmlns:fhttp://java.sun.com/jsf/core
h:headtitleJCG conversation 2/title
/h:head
h:bodyh:outputText valueContinuing../h:outputTextbr /br /h:outputText value#{cDIConversationScopedBean.message}/h:outputTextbr /br /h:link outcome/thirdpage.xhtml valueLets end the converationf:param namecid value#{cDIConversationScopedBean.conversation.id} //h:link
/h:body
/html 第三页再次显示message值。 通过单击“结束对话”命令链接将调用Bean的endConversation()方法该方法将客户端重定向到第一页从而将conversation设置为瞬态。 thirdPage.xhtml !DOCTYPE html
html xmlnshttp://www.w3.org/1999/xhtmlxmlns:hhttp://java.sun.com/jsf/htmlxmlns:fhttp://java.sun.com/jsf/core
h:headtitleJCG conversation 3/title
/h:head
h:bodyh:outputText valueEnding conversation/h:outputTextbr /br /h:outputText value#{cDIConversationScopedBean.message}/h:outputTextbr /br /h:formh:commandLink action#{cDIConversationScopedBean.endConversation}valueEnd conversation //h:form
/h:body
/html5.配置web.xml 在Web应用程序中 web.xml文件是定义服务器需要了解的有关应用程序的所有内容的文件。 此处设置了Servlet和其他组件如过滤器或侦听器初始化参数容器管理的安全性约束资源欢迎页面等。 在JFS应用程序中我们需要在web.xml文件中定义javax.faces.webapp.FacesServlet 该类是负责处理JSF应用程序的类。 FacesServlet是JSF应用程序的中央控制器。 在显示JSP之前它将接收对JSF应用程序的所有请求并初始化JSF组件。 因此 web.xml文件具有定义FacesServlet的条目。 它是servlet条目。 它还具有一个servlet-mapping项以映射URL以.xhtml结束的所有请求以供servlet处理。 在这里我们还指定servlet侦听器用于启动Weld并控制其与请求的交互。 web.xml ?xml version1.0 encodingUTF-8?
web-app xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlnshttp://java.sun.com/xml/ns/javaee xmlns:webhttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsdxsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsdidWebApp_ID version3.0display-nameCDI Web Application/display-namelistenerlistener-classorg.jboss.weld.environment.servlet.Listener/listener-class/listenerservletservlet-namefaces/servlet-nameservlet-classjavax.faces.webapp.FacesServlet/servlet-classload-on-startup1/load-on-startup/servletservlet-mappingservlet-namefaces/servlet-nameurl-pattern*.xhtml/url-pattern/servlet-mapping/web-app6.运行应用程序 为了运行该应用程序我们需要使用Maven构建项目。 产生的war文件必须放置在tomcat的webapps文件夹中。 然后我们可以继续 本地主机8080 / cdibeans / firstpage.xhtml 在浏览器上结果如下所示 通过单击“获取您的消息”按钮我们可以更改message 如下所示 通过单击“继续此消息”链接我们将转到下一页并携带message值。 通过单击“让我们结束对话”链接我们进入下一页并且仍然保留message值。 现在如果我们单击“结束对话”链接对话将关闭并再次显示第一页开始新的对话。 这是Java EE CDI ConversationScoped Bean的教程。 下载本教程的源代码 CDIConversationScopedBeansExample.zip 翻译自: https://www.javacodegeeks.com/2013/04/java-ee-cdi-conversationscoped-example.html