|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢?server
JavaServerFaces1.0Framework使您可轻松创立壮大和静态的Web使用程序。市场上有很多可用的Web用户界面框架,可是JavaServerFacesTechnology因为以下几种缘故原由而锋芒毕露:它是一个JavaCommunityProcess尺度;它为WebUI编程引进了JavaBeans组件典范;而且它的构建接纳了很多已有架构的长处。作为一个尺度,很多工具供给商能够受害于严厉界说且分歧的举动。JavaServerFacesTechnology的计划理念是一入手下手就在工具外部利用。用户也能够受害于分歧JavaServerFaces手艺完成之间的分歧且明白的举动。
在JavaServerFacesTechnology中供应了良多有效的特征。必要侧重先容的一些次要功效包含:
ManagedBean工具
考证工具
丰厚且可扩大的组件库
拔出式出现工具包
对详细用户事务呼应的导航
跨哀求保存使用程序形态
转换模子
本文将扼要先容JavaServerFacesTechnology的这些功效而且给出一些例子。
关于这些功效的具体信息和JavaServerFacesTechnology供应的其他功效,请参考J2EE指南的JavaServerFacesTechnology的相干章节(第17-21章)。
JavaServerFaces使用程序本色上是一个运转在一个与Java(TM)2Platform,EnterpriseEdition(J2EE(TM)platform)兼容的容器中的Servlet大概JavaServerPages(JSP)使用程序。这申明它必要JavaServlet2.3和JSP1.2大概更新的版本。入手下手创立和设置一个JavaServerFaces使用程序的最好的办法是收费下载Java2SoftwareDevelopmentKit,StandardEdition(J2SESDK)1.4大概更高版本。必要指出的是,JavaServerFacesTechnology不请求在使用程序中利用JSP页面,您能够自在选择间接利用Servlets大概其他模板手艺。假如的确对JSP容器利用了JavaServerFacesTechnology,您将经由过程JavaServerFaces的客户组件标签从内建的JavaServerFaces内核和HTML组件库中受害。JavaServerFaces组件代表像文本字段、表单、按钮、表格、复选框等的Web控件。
利用JavaServerFacesTechnology创立一个JSP页面时,在服务器的内存中会创建一个组件树,每个组件标签对应树中的一个UIComponent实例。该框架利用组件树来处置使用程序的哀求而且创立一个出现出的呼应。当用户天生一个事务时,比方,点击了一个按钮,JavaServerFaces性命周期即处置该事务而且发生得当的呼应。这是一个对年夜多半图形用户界面编程的表单而言而罕见的一种的典范(paradigm)。
FacesServlet是进进JavaServerFaces框架的出口点。它处置哀求处置性命周期而且用作一个前端把持器。JavaServerFacesTechnology也有保留主要哀求信息的高低文的观点。高低文对象被称为FacesContext。在JavaServerFacesTechnology性命周期的每一个阶段高低文对象都被修正而且每次哀求时都是无效的。
JavaServerFacesTechnology框架也有“值绑定”和“办法绑定表达式”的观点。假如熟习了像JSPStandardTagLibrary(JSTL)大概JSP2.0如许的手艺,您就已熟习了表达式言语的观点。JavaServerFacesTechnology绑定表达式使您能够简单地和底层数据模子交互。CharacterCombat演示使用程序举例申明了怎样利用“值绑定”从数据模子中提取值。
复杂的JavaServerFacesTechnology使用程序
本文包括一个复杂的JavaServerFaces使用程序,它分析了JavaServerFacesTechnology的一些主要观点。为了了解该使用程序,您应当已熟习了包含JSP、Servlets和标签库在内的基础的J2EEWeb手艺。
示例使用程序后的基础设法是让用户列入一个疾速风趣的游戏。您是不是想晓得假如从《指环王》中取两团体物并使它们相互打架会产生甚么?示例使用程序以一种复杂风趣的体例回覆了这个成绩。该使用程序的称号是CharacterCombat。
CharacterCombat的构成以下:
JSP页面,带有暗示UI的JavaServerFaces组件
包容模子数据的backingbean
使用程序设置文件指定:
JavaServerFacesControllerServlet
ManagedBean
导航处置
上图显现了CharacterCombat演示使用程序中的页面流:
在首页面,用户能够举行以下操纵:
增加更多字符
间接转到下一页面
在第二页面,用户能够举行以下操纵:
前往到首页面并增加更多字符
选定战役的第一个介入者
转到第三页面
在第三页面,用户能够举行以下操纵:
前往到第二页面
选定战役的第二个介入者
转到尾页面
在尾页面,用户能够举行以下操纵:
检察战役了局
前往到第三页面
从头入手下手演示使用程序
您将注重到该事情流程切合“导游”UI计划形式。我们已将本例的导游功效提取到一个您本人的使用程序的一个复杂bean中。
运转使用程序
最新的JavaServerFacesTechnology1.0Framework和其他一切运转时用到的从属程序已集成到SunJavaSystemApplicationServerPlatformEdtion8中。您不必要在ApplicationServer中举行任何分外的设置步骤来设置一个JavaServerFacesweb使用程序。ApplicationServer是收费的,它包括了J2EE手艺最新的完成。假如您下载了J2EE1.4SDK,个中已包括了ApplicationServer。
假如编写本人的JavaServerFacesweb使用程序,要利用JavaServerFacesTechnology1.0框架,独一必要您在使用程序服务器中做的事变是指定FacesServlet实例并映照您的Web使用程序的部署形貌符。一切从属文件已是容器的一部分,您不必要绑定任何分外的JAR文件。
要运转本文中会商的示例程序,只必要复杂地将所供应的设置war文件部署在使用程序服务器中就能够了。经由过程利用高低文称号“jsf-characterCombat”就能够利用使用程序。除一个事后构建的war文件,还供应了演示源代码。在与源代码一同刊行的README中您将找到怎样设置和构建的唆使。
经由过程依照java.net上的关于新建javaserverfaces项目标FAQ中的唆使,能够会见本演示的源代码:
https://javaserverfaces.dev.java.net/faq.html#Code_checkout。
一旦依照了这些唆使,就能够鄙人述地点扫瞄本文的源代码:
https://javaserverfaces-sources.dev.java.net/source/browse/javaserverfaces-sources/jsf-demo/characterCombat/
演示使用程序构建模块
部署形貌符
为了在Web使用程序中利用JavaServerFaces框架,必要在部署形貌符中界说FacesServlet和一个FacesServlet映照。上面是一个例子:
<!--FacesServlet--><servlet><servlet-name>FacesServlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><!--FacesServletMapping--><servlet-mapping><servlet-name>FacesServlet</servlet-name><url-pattern>*.faces</url-pattern></servlet-mapping>
FacesServlet实例作为JavaServerFacesTechnology框架中的一个前端把持器。它处置一切与JavaServerFacesTechnology相干的哀求。
在下面的例子中利用了扩大名映照。利用扩大名映照,Web容器会将一切哀求发送到FacesServlet,以猎取扩大名如“*.faces”的页面。
您也能够利用前缀映照来映照到FacesServlet实例。比方,您可使一切名字以“/faces/*”为前缀的Web页面经由过程FacesServlet实例。
使用程序设置
一切JavaServerFacesTechnology的详细设置信息都将进进像faces-config.xml如许的使用程序设置文件中。在设置文件中能够界说ManagedBean、NavigationRule、Converter和Validator等。
上面是设置文件中的一个条目标例子:
<faces-config><managed-bean><managed-bean-name>modelBean</managed-bean-name><managed-bean-class>characterCombat.ModelBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope></managed-bean></faces-config>
该条目在一个bean称号和类之间创立了一个映照。该映照由ManagedBean创立工具利用。“modelBean”第一次被援用时,将创立模子对象并将它保留到得当的感化域中。本文的前面会商了ModelBeanbean。
另有更多的设置选项,在JavaServerFacesTechnology1.0标准您能够找到完全的设置选项集。
构建使用程序
在演示源代码公布中包括了一个预构建的war文件。您能够在Web容器中部署该war文件。
注重该war文件包括了一个JSTL1.1完成。假如您的Web容器不撑持JSTL1.1,那末您必要用一个JSTL1.0完成从头构建war文件。
假如但愿本人构建演示使用程序,您必要遵守以下步骤:
在试图创建演示使用程序之前,确保具有一切的编译时从属文件。演示使用程序供应了一个“build.properties.sample”文件。复制该文件并将其从头定名为“build.properties”而且举行变动使之合适您的情况。
假如您正在利用ApplicationServerortheJ2EE1.4SDK,JavaServerFacesTechnology1.0Framework和运转一个JavaServerFaces使用程序的所需的全体从属文件已是您的情况的一部分了。独一必要做的事变是在您的“build.properties”文件中修正SJSASPE8.0安装地位。
CharacterCombat演示使用程序供应了一个“build.xml”文件。该文件包括了一组创建演示使用程序web档案的划定规矩和方针。要构建使用程序您还必要Ant。Ant已是SJSASPE8.0刊行的一部分,它位于<SJSAS_HOME>/bin/asant中。
要利用SJSASPE8.0容器来创建演示使用程序,只必要在您的解包的CharacterCombatdemo目次中挪用“asant”,您的“build.xml”和定制的“build.properties”文件也在这个目次中。
CharacterCombat演示使用程序架构
ManagedBean
ManagedBean只是具有一个public无参数机关函数的类,这与JavaBeans1.0的办法定名商定是分歧的,而且和利用ManagedBean工具的Faces使用程序也是一样的。ManagedBean工具在WEB-INF/faces-config.xml文件中举行设置。在该文件中您能够安排任何数目的<managed-bean>声明,每一个声明包括一个名字、一个类和感化域。在Web使用程序本身中,您可使用在JavaServerFacesExpressionLanguage表达式中界说的Bean称号来援用bean。您第一次援用bean时,它将被创立并安排在得当的感化域中。ManagedBean长短常天真的,它同意您经由过程指定属性来定制本人的bean,这些属性包含Java数组、映照、列表和其他ManagedBean。
CharacterCombat实例有一个名为ModelBean的backingbean。上面是利用ManagedBean工具在WEB-INF/faces-config.xml文件中界说ModelBeanbean的办法:
<managed-bean><managed-bean-name>modelBean</managed-bean-name><managed-bean-class>characterCombat.ModelBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope></managed-bean>
谁人bean厥后在Web使用程序的JSP页面中被援用。上面是一个怎样利用bean的例子:
<h:inputTextvalue="#{modelBean.customName}"/>
个中<h:inputText/>是一个嵌套在表单中的文本字段组件。当表单被提交时,文本字段中的值将作为“customName”属性保留在ModelBean中。“#{”和“}”指定利用一个“值绑定”表达式。该值绑定表达式告知框架“customNameThe”是一个JavaBean属性,它在“modelBean”关头字下的ModelData中界说。依据WEB-INF/faces-config.xml设置文件,框架的ManagedBean工具晓得了类映照的bean名,而且假如bean不存在就初始化该bean。
对象模子
CharacterCombat例子创立了一个ModelBean对象。与其他JavaBeans组件一样,ModelBean包括了一组会见办法。它也预置了一个默许的字符表,同时也存储用户定制的字符。
ModelBean是利用ManagedBean创立工具创立的,而且由在视图中界说的JavaServerFaces组件经由过程名字援用。ModelBean申明了怎样利用bean来保留组件的值。
在本例中只撑持增加新字符。经由过程变动模子和视图来撑持该功效,对程序的优秀扩大能够撑持删除功效。
JSP页面
JSP页面为Web使用程序供应UI。JavaServerFacesTechnology供应两个JSP标签库,它们将组件展示给页面的作者。您能够定制这些组件大概创立本人的组件。尺度组件作为基础HTML4.01组件出现,使得JavaScript相对最小。这确保您的页面在一切的扫瞄器中定期看的模样显现。假如您必要对其他出现范例(如WML或SVG等)的撑持,JavaServerFacesTechnology包括了一个RenderKit的观点,它是一个软件模块,组件利用它能够将本人出现到特定的客户设备范例中。
要利用包括组件的内建JavaServerFaces标签库,您必要在JSP页面中包括上面的指令:
<%@tagliburi="http://java.sun.com/jsf/core"prefix="f"%><%@tagliburi="http://java.sun.com/jsf/html"prefix="h"%>
注重您的JavaServerFaces页面必要一切的JavaServerFaces标签包括在<f:view>...</f:view>标签间,从而能够准确的创建组件树。
每个HTML组件都可使用款式表来定制。您能够指定一个一样平常的styleClass大概为组件设置特定的款式属性值。
上面是一些用来讲明下面的观点的CharacterCombat使用程序中的一些例子,:
DataTable
DataTableUIComponent能够处置几种分歧范例的数据模子,个中包含java.util.List和java.sql.ResultSet。它提取数据并将数据显现在一个可定制的表格中。该组件也能够利用款式表来定制。
在CharacterCombat演示使用程序中,利用List作为底层数据模子。上面是一个代码片段:
<h:dataTablecolumnClasses="list-column-center,list-column-center,list-column-center,list-column-center"headerClass="list-header"styleClass="list-background"value="#{modelBean.dataList}"var="character"><f:facetname="header"><h:outputTextvalue="ListofAvailableCharacters"/></f:facet><h:column><f:facetname="header"><h:outputTextvalue="Name"/></f:facet><h:outputTextvalue="#{character.name}"/></h:column><h:column><f:facetname="header"><h:outputTextvalue="Species"/></f:facet><h:outputTextvalue="#{character.species.type}"/></h:column>...</h:dataTable>
正如您在本例中所见到的,依据在<h:dataTable/>标签中的界说,#{modelBean.dataList}对保留在“character”变量中的字符条目列表举行求值。关于列表中的每一个字符都创立一个新行而且依据响应的<h:column/>tags标签举行显现。
<f:facet/>标签在包括在facet中的组件和它的父组件之间创立了一种特别的干系。这类特别干系使您可界说组件为题目大概页脚。在我们的例子中,我们利用facet来为列创立题目。
既然<h:dataTable/>是一个HTML组件,它的款式就能够利用款式表来定制。在我们的例子中,我们为您展现怎样为几种分歧的<h:dataTable/>属性利用款式特征。我们在JSP页面题目中利用上面的代码片段来导进名为“stylesheet.CSS”的款式表:
<linkrel="stylesheet"type="text/css"href=<%=request.getContextPath()+"/stylesheet.css"%>>
上面是出现的HTMLHereDataTable的模样:
PanelGrid
关于复杂的表格结构您可使用<h:panelGrid/>组件。不像DataTable组件,PanelGrid不承受任何底层数据模子。
上面是一个两列的表格的例子。在第一行界说了一个题目。第二行的第一列包括一个InputText字段,第二列包括了一个列表的下拉选项:
<h:panelGridcolumnClasses="list-column-center,list-column-center"headerClass="list-header"styleClass="inputList-background"columns="2"><f:facetname="header"><h:outputTextvalue="CustomizeCharacter:"/></f:facet><h:inputTextvalue="#{modelBean.customName}"/><h:selectOneListboxvalue="#{modelBean.customSpecies}"required="true"size="1"><f:selectItemsvalue="#{modelBean.speciesOptions}"/></h:selectOneListbox></h:panelGrid>
InputText
InputText组件是一种用来失掉用户提交的信息的办法。在我们的例子中,我们经由过程以下指定值属性将文本字段和模子毗连起来:
<h:inputTextvalue="#{modelBean.customName}"/>
InputText嵌套在一个表单中。一旦表单被提交,字段中的值就会映照到我们的模子中。
鄙人面的图象中,您能够看到PanelGrid结构组件中的一个InputText、一个CommandButtons汇合和一个ListBox的组合:
OutputText
OutputText组件能够以分歧的体例显现信息。比方,您能够将它设置为跳过HTML标签,变动一切尖括号的显现为得当的<语法大概无变动地间接传送标签。您也能够对该组件利用各类款式表。
在全部示例使用程序中都利用了OutputText来显现来自模子的数据。在本例中我们显现了字符的名字:
<h:outputTextvalue="#{character.name}"/>
SelectOneRadio
您可使用SelectOneRadio来显现一个单选按钮选择汇合。您能够包括一组单选选项和嵌套的选项组。上面是在我们的例子中利用SelectOneRadio的办法:
<h:selectOneRadiolayout="pageDirection"required="true"value="#{modelBean.firstSelection}"><f:selectItemsvalue="#{modelBean.allCharactersToSelect}"/></h:selectOneRadio>
Layout属性告知<h:selectOneRadio/>组件垂直结构而不是默许的程度结构。我们的ModelBean“charactersToSelect”办法前往一个SelectItems的列表,SelectOneRadio晓得怎样显现它们。该单选组件嵌套在一个表单中。当表单被提交时,选中的单选项就会保留在模子的“currentSelection”属性中。
CommandButton
CommandButton是一个输出组件,它能够创立ActionEvent(举措事务)。您能够创立举措监听器来监听用户在扫瞄您的JavaServerFacesweb使用程序时的特定的事务。您也能够为一个使用程序举措供应一个举措办法绑定,中选中组件时激活它。本例中我们利用了后者:
<h:commandButtonactionListener="#{modelBean.addCustomName}"value="AddName"/>
鄙人一节我们将会商举措,由于它们在导航处置中长短常主要的。
上面申明怎样提交RadioButtons汇合和CommandButton导游:
导航:示例导游组件
让我们看一下该使用程序中处置导航的导游组件。该组件有三个部分,下图顶用黑体显现它们。
要利用该组件用户必需做两件事变:
在Web使用程序UI中包括该组件
制造响应的导航划定规矩
上面我们具体先容这些步骤。WizardButtonsManagedBean的细节超越了本文的会商局限,可是基础上讲,它有一些办法可依据用户在导游页面流程中确当前地位来启用或禁用next和back按钮。
在UI中包括按钮
经由过程<jsp:include>机制能够在使用程序UI中包括组件。在示例使用程序的每一个页面中,您城市在底部看到上面的代码行:
<jsp:includepage="wizard-buttons.jsp"/>
看一下该页面,我们看到它有上面的标签:
<%@pagecontentType="text/html"language="java"%><%@taglibprefix="f"uri="http://java.sun.com/jsf/core"%><%@taglibprefix="h"uri="http://java.sun.com/jsf/html"%><f:subviewid="wizard-buttons"><h:panelGridcolumns="2"><h:commandButtonvalue="<Back"action="back"disabled="#{wizardButtons.hasBack}"/><h:commandButtonvalue="#{wizardButtons.nextLabel}"action="next"disabled="#{wizardButtons.hasNext}"/></h:panelGrid></f:subview>
值得注重的是任何位于被包括页面中的JavaServerFaces组件必需是<f:subview>标签的子组件,正如在父页面中它们必需是<f:view>标签的子页面一样。本例并没有展现这一点,可是您想包括在子视图中的任何模板标签文本都必需事后包装在<f:verbatim>标签外部。
您能够看到该页面只要一个PanelGrid,它显现了两个相邻的按钮。这些按钮的属性被绑定到WizardButtonsbean供应的办法和属性上。这些按钮和该bean被计划成协同事情。前进按钮有本人的值而且举行了举措硬编码。下一个按钮从WizardButtonsbean提取值而且举行了举措硬编码。
导航划定规矩
导航划定规矩是导游组件的中心。这些划定规矩必需包括在使用程序的faces-config.xml文件中。上面是演示使用程序划定规矩的一个子集。您可使用这些划定规矩作为出发点来在您本人的使用程序中使用导游组件。
<navigation-rule><from-view-id>/main.jsp</from-view-id><navigation-case><description>Iftheactionreturns"next",gotofirstSelection.jsp</description><from-outcome>next</from-outcome><to-view-id>/firstSelection.jsp</to-view-id></navigation-case></navigation-rule><navigation-rule><from-view-id>/firstSelection.jsp</from-view-id><navigation-case><description>Iftheactionreturns"next",gotosecondSelection.jsp</description><from-outcome>next</from-outcome><to-view-id>/secondSelection.jsp</to-view-id></navigation-case><navigation-case><description>Iftheactionreturns"back",gotomain.jsp</description><from-outcome>back</from-outcome><to-view-id>/main.jsp</to-view-id></navigation-case></navigation-rule>
导航划定规矩形貌了怎样依据举措的挪用地位来处置举措,以下所示:
假如举措在“"main.jsp”页面挪用并前往“next”,则导航处置程序出现“firstSelection.jsp”页面
假如举措在“firstSelection.jsp”页面挪用而且前往“back”,则我们转到主页面
假如挪用的举措前往“next”,我们将转到“secondSelection.jsp”页面
举措
您能够回忆到在事情流程图中首页面是特别的,由于事情流程可使得该页面从头加载。当用户但愿向字符表中增加字符时就会从头加载首页面。这一增加是经由过程在页面中安排一个按钮来完成的,在按钮被按下时激发响应的举措。
在“main.jsp”页面中,您能够看到该按钮的声明:
<h:commandButtonactionListener="#{modelBean.addCustomName}"value="AddName"/>
实践的举措处置程序的完成在ModelBean.java文件中。“addCustomName”办法将name增加到表格中。
publicvoidaddCustomName(ActionEventevent)throwsAbortProcessingException{if((customName!=null)&&(!customName.trim().equals(""))){customName=customName.trim();//checktoseeifnamealreadyexistsinlistIteratoriter=dataList.iterator();while(iter.hasNext()){CharacterBeanitem=(CharacterBean)iter.next();if(item.getName().equals(customName)){reset();return;}}//createnewentryCharacterBeanitem=newCharacterBean();item.setName(customName);item.setSpecies((SpeciesBean)speciesPropertyMap.get(customSpecies));dataList.add(item);}}
当挪用带有举措监听器的CommandButton时,就会挪用举措程序。“addCustomName”办法遍历已有字符的列表,假如没有在列表中发明新的名字,它就创立一个新的Character条目。
假如这个举措处置程序有一个前往值,导航处置程序能够用该值来决意下一个举措并依据了局来决意导航的偏向。在这个特别的例子中没有前往值,由于只是从头显现统一个页面,可是增加了一个新的用户名条目。举措处置程序和导航处置程序的计划决意了它们能够轻松地互操纵。
停止语
本文先容了JavaServerFacesTechnology框架中供应的一些功效。示例使用程序演示了组件、导航、举措处置程序和款式表的利用。
JavaServerFaces能够匡助您轻松地创立庞大而且强健的Web使用程序。它是一种在几年中开展起来的尺度的JavaWeb使用程序框架。要入手下手利用JavaServerFaces,您必要做的就是收费下载SunJavaSystemApplicationServerPlatformEdition8.0大概theJ2EE1.4SDK。作为一个尺度,它的定位是可以被用户和工具供应商所接纳。JavaServerFacesTechnology是一个工具,它能够匡助您利用MVC道理构建杰出的Web使用程序。作为一个了局,利用JavaServerFaces,就能够区分甚么是好的使用程序,甚么又是杰出的使用程序。
关于
EdBurns是SunMicrosystems的初级工程师。自从1994年以来,Ed列入了各类客户端和服务器端Web手艺的事情,包含NCSAMosaic、Mozilla、SunJavaPlugin、JakartaTomcat和最新的JavaServerFaces。Ed如今是JavaServerFaces的团结带头人。
JustynaHorwat是SunMicrosystems的下一代JSP尺度标签库的主任工程师。自从1999年以来,她普遍地列入了JavaWeb手艺的研发,她同时对JavaServerFaces和ApacheTomcat对出了很年夜的奉献。几年来,她一向活泼在开放源代码社区,2002年她成为Apache软件基金构造的第一名女性开辟成员。
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发 |
|