JSF的学习笔记.docx
- 文档编号:12668156
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:37
- 大小:91.39KB
JSF的学习笔记.docx
《JSF的学习笔记.docx》由会员分享,可在线阅读,更多相关《JSF的学习笔记.docx(37页珍藏版)》请在冰豆网上搜索。
JSF的学习笔记
一、JSF的学习笔记:
1.处理JSF页面的生命周期:
2.JSF提供以下标准验证器
Validator类
Validator标签
Validation
DoubleRangeValidator
validate_doublerange
验证组件的本地值是否在指定的范围之内。
该值必须是floating-point类型或者可转换为floating-point类型。
LengthValidator
validate_length
验证组件的本地值的长度是否在指定的范围之内。
LongRangeValidator
validate_longrange
验证组件的本地值是否在指定的范围之内。
注意该值必须是long类型或者可转换为long类型。
RequiredValidator
validate_required
验证组件的本地值是否为null。
StringRangeValidator
validate_stringrange
验证组件的本地值是否在指定的范围之内。
该值必须是String类型。
UIComponentTag中有两个抽象方法:
getComponentType()和getRendererType()。
getComponentType()方法返回绑定到该标签的组件的组件类型。
另一个方法getRendererType()选择要用于呈现该组件的呈现程序。
在上面的代码中,getRendererType()返回null,意味着该组件将自己管理呈现过程,而不是借助外部呈现程序。
如果显式地设置了这个标签处理程序的对应属性,却没有设置该组件的对应属性,则overrideProperties()将用于改写组件的属性。
其余方法是典型的JavaBeans方法,可用来获取(get)和设置(set)元素值。
3.JSF页面导航机制
JavaServerFaces实现提供一个默认的动作侦听器来确定动作的结果。
定义结果的方式有两种。
第一种是使用一个字符串属性,如下所示:
command_buttonid="US"label="English" commandName="English"action="success"> 结果是组件内的action属性的值。 您还可以使用Action对象。 当需要额外的处理时,可以使用一个Action对象来执行想要的动作。 下面是一个例子: command_buttonid="submit"key="submit"bundle="myBundle" commandName="subscribe" actionRef="subscriberBean.submitSubscription"/> 在用户单击按钮之后,由actionRef属性引用的Action对象就会被获取并执行。 结果将由Action对象的invoke()方法返回。 在确定结果之后,默认的动作侦听器就会把这个结果传递给NavigationHandler实例。 基于该结果,NavigationHandler将通过匹配应用程序配置文件中的规则来选择适当的页面。 4.在组件上注册事件侦听器 action_listenertype="net.jackwind.jsf.LocaleEventHandler"/> 1.组件类定义了UI组件的状态和行为。 状态信息包括组件的类型、标识符和本地值。 组件类定义的行为的一些例子包括解码(将请求参数和其他信息转换为组件的本地值)、编码(将本地值转换为某种标记)或者更新模型对象 5.Renderer decode方法: 是在JSF生命周期的第二个阶段---APPLY_REQUEST_VALUES调用的,负责从Request里面取值,然后做相应的动作,这里我们需要从Request里面获取是否有点击了SayHello按钮这个动作,如果有,那么往队列里面插入一个事件,等到生命周期的第五个阶段---INVOKE_APPLICATION去响应。 encodeEnd方法: 是在JSF生命周期的第六个阶段---RENDER_RESPONSE调用的,负责把组件渲染成HTML和javascript代码,然后写向Response,看下面代码的注释就应该清楚了,与这个方法相关的还有encodeBegin,encodeChildren,分别是渲染标签的开始标志,渲染标签的子节点,渲染标签的结束标志。 6.注册组件 要注册该组件,我们需要在应用程序配置文件中插入一个组件条目。 下面是注册该电子邮件地址输出组件的代码: --==============Customcomponents=========================--> //声明让你指定一个值或者方法来绑定一个表达式,当它第一次被引用时,将被执行用来初始化一个context变量的值。 7.标签 1.分页 dataTableid="listentitys"var="item" value="#{pageItems}"cellpadding="0"cellspacing="0"border="0" styleClass="main-table-1"> column> facetname="header">//表头 panelGroupstyle="text-align: center"> selectBooleanCheckboxid="sbcAll"onclick="CheckAll();" style="border: 0px;width: 15px;height: 15px"/> panelGroup> facet> verbatim> 100%;text-align: center"> verbatim> selectBooleanCheckboxid="sbcSelRel"value="#{item.selected}"onclick="cleares('frmMain: listentitys: sbcAll')" style="border: 0px;width: 15px;height: 15px"> selectBooleanCheckbox> verbatim> verbatim> column> column> facetname="header"> outputTextid="headerText2"value="出口销售合同号"/> facet> commandLinkvalue="#{item.code}"action="#{expcmFace.select}"/> column> column> facetname="header"> outputTextid="headerText8"value="最迟装运期"/> facet> outputTextid="otSignssDate"value="#{item.shipInfo.dateshipava}"> convertDateTimepattern="yyyy-MM-dd"/> outputText> column> dataTable> 2.分页信息 <%@includefile="/business/pageTop.jsp"%> <%@includefile="/business/pageBottom.jsp"%> 3.显示错误信息 <%@includefile='/system/main/errorMessage.jsp'%> 4. validateAll>标签是Seam特有的。 该JSF组件告诉JSF让它用实体Bean中所指定的Hibernat验证器注解来验证所有包含输入的字段; JSF学习笔记 参数传递(主要指managed-bean和managed-bean之间) (一)使用commandLink和param commandLinkaction="myAction">( commandLinkaction="#{myBean01.myAction01}">) paramvalue="#{myBean01.myProperty01}"/> commandLink> 对myParam的使用有如下几种情况: (1) 将其用于managed-bean的managed-property。 例如: 这样可以实现两个managed-bean之间的参数传递。 存在的问题: 因为managed-property用于对managed-bean进行初始化,如果managed-bean已经初始化了(比如managed-bean的scope是session的,如果在session中第二次试图使用managed-property进行managed-bean之间的参数传递,那么将会失败;再比如,如果对引用managed-bean的page使用了Tomahark的saveState标签,那么在saveState范围内第二次试图使用managed-property进行managed-bean之间的参数传递,那么也将会失败)。 对该问题的解决请看 (2)。 (2) 将其传递给commandLink的action,然后在managed-bean中对其进行处理,可以用它对managed-bean的property进行赋值。 例如: publicStringmyAction01(){ FacesContextfacesContext=FacesContext.getCurrentInstance(); ExternalContextexternalContext=facesContext.getExternalContext(); HttpServletRequesthttpRequest=(HttpServletRequest)externalContext.getRequest(); if(httpRequest.getParameter("myParam")==null{ returnnoParam; }else{ doyourthingswhichyouwanttodo...... } 这样也可以实现两个managed-bean之间的参数传递。 解决了 (1)中出现的问题,还可以对传递过来的myParam进行深层次处理。 (二)不使用commandLink和param 这种情况下,我们需要从managed-bean中直接访问JSP中的managed-bean中的property.具体有两种方式: (1) 使用ExpressionFactory。 例如: FacesContextfacesContext=FacesContext.getCurrentInstance(); ELContexteLContext=facesContext.getELContext(); ExpressionFactoryexpressionFactory=facesContext.getApplication().getExpressionFactory(); try{ ValueExpressionvalueExpression=expressionFactory.createValue); }catch(ClassNotFoundExceptione){ System.out.println("Nosuchclassfound"); } (BeanClassName)valueExpression.getValue(eLContext.getMyProperty01); doyourthingswhichyouwanttodo...... 在JSF1.1中,使用ValueBinding实现类似功能,在JSF1.2中已经被deprecated了。 (2) 使用ELResolver。 例如: FacesContextfacesContext=FacesContext.getCurrentInstance(); ELContexteLContext=facesContext.getELContext(); ELResolvereLResolver=facesContext.getApplication().getELResolver(); BeanClassNamemyBean01=(BeanClassName)eLResolver.getValue(eLContext,null,"myBean01"); doyourthingswhichyouwanttodo...... 在JSF1.1中,使用VariableResolver实现类似功能,在JSF1.2中已经被deprecated了。 MyEclipse的Hibernate工具 对于SQLServer主键递增的表,使用MyEclipse的Hibernate自动生成工具生成的mapping文件时一般如下: 这时候需要手动修改assigned为identity。 二、EJB3.0学习 1.EJB3.0的很多新特性是通过JAVASE5.0来实现的。 这里我们就要谈到JAVASE5.0,它所提供的许多特性,其中最有趣的一点就是标注(Annotation)的功能。 2.可持续化的Serializable 3.@Stateless标注表示这是一个statelesssessionBean 4.@Remote实现远程接口 5.@Resource标识资源 6.目前EJB3.0spec里面有两种注入方式,setter注入和变量注入,这些在以后的规范中可能会有变化,比如一种统一的注入方式。 我们可以通过注入标记@EJB来定义一个EJB的引用,也可以通过注入标记@resource表示我们要引用一个资源,它可以是EJB以外的一切环境对象.专家组为了尽可能的简化开发,将使用注入的对象类型作了简化。 @EJBShoppingCartmyCart; 7.@TransactionAttribute(MANDATORY)用@transactionattribute(mandatory)标注这个方法必须在一个客户端的transaction中,如果客户端没有这样的一个TransactionContext,Container会扔出来一个Javax.ejb.EjBTransactionRequiredException的错误信息 8.@PostConstruct @PostActivate publicvoidinitRemoteConnectionToAccountSystem{ //标注初始化方法 } 9 @PreDestroy @PrePassivate publicvoidcloseRemoteConnectionToAccountSystem{ //标注回调方法 } 10.Entitymanager自己的生命周期可以由Container或者应用程序都可以来管理.EntityManager将负责跟踪数据库事务上下文中,实体bean对象的状态。 11.@Entity @Table(name="CUSTOMER") @SecondaryTable(name="CUST_DETAIL",//SecondaryTable标记了Entity对应的辅助表, pkJoin=@PrimaryKeyJoinColumn(name="CUST_ID")) publicclassCustomer{...} 12.void processAll(Collection c){ for (MyClass myObject : c) myObject.process(); } 13.基类中元数据描述: @Inheritance(strategy=InheritanceType.SINGLE_TABLE, discriminatorType=DiscriminatorType.STRING,discriminatorValue="employee") strategy=InheritanceType.SINGLE_TABLE表示继承映射采用第一种映射策略。 discriminatorType=DiscriminatorType.STRING表示继承层次中类型识别列类型为String. discriminatorValue="employee"表示此类对应的类型识别码为employee 14.JAVA1.5Annotation应用 @+annotation类型名称+(..逗号分割的name-value对) @interface自定义的Annotation @Retention(RetentionPolicy.RUNTIME)表示我们创建的SimpleAnnotation这个Annotation将会存储在Class文件中,并在javaVM运行时加载它 @Target(ElementType.METHOD)这个meta-annotation表示我们创建的SimplwAnnotation将会为描述方法 Java中的Annotation的定义 Java中的Annotation Java定义了几个标准的meta-annotation,在新Package中java.lang.annotation中包含了以下meta-annotation: meta-annotation说明 @Target 1.annotation的target是一个被标注的程序元素。 target说明了annotation所修饰的对象范围: annotation可被用于packages、types(类、接口、枚举、annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。 在annotation类型的声明中使用了target可更加明晰其修饰的目标。 meta-annotation说明 @Target1.annotation的target是一个被标注的程序元素。 target说明了annotation所修饰的对象范围: annotation可被用于packages、types(类、接口、枚举、annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。 在annotation类型的声明中使用了target可更加明晰其修饰的目标。 2.ElementType的定义 是用来指定Annotation类型可以用在哪一些元素上的.说明一下: TYPE(类型),FIELD(属性),METHOD(方法),PARAMETER(参数),CONSTRUCTO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSF 学习 笔记