JSF的学习笔记Word文档下载推荐.docx
- 文档编号:1308250
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:37
- 大小:91.39KB
JSF的学习笔记Word文档下载推荐.docx
《JSF的学习笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JSF的学习笔记Word文档下载推荐.docx(37页珍藏版)》请在冰点文库上搜索。
JavaServerFaces实现提供一个默认的动作侦听器来确定动作的结果。
定义结果的方式有两种。
第一种是使用一个字符串属性,如下所示:
<
h:
command_buttonid="
US"
label="
English"
commandName="
action="
success"
>
结果是组件内的action属性的值。
您还可以使用Action对象。
当需要额外的处理时,可以使用一个Action对象来执行想要的动作。
下面是一个例子:
submit"
key="
bundle="
myBundle"
subscribe"
actionRef="
subscriberBean.submitSubscription"
/>
在用户单击按钮之后,由actionRef属性引用的Action对象就会被获取并执行。
结果将由Action对象的invoke()方法返回。
在确定结果之后,默认的动作侦听器就会把这个结果传递给NavigationHandler实例。
基于该结果,NavigationHandler将通过匹配应用程序配置文件中的规则来选择适当的页面。
4.在组件上注册事件侦听器
f:
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=========================-->
component>
<
component-type>
UIOutputEmail<
/component-type>
component-class>
net.jackwind.jsf.UIOutputEmail<
/component-class>
/component>
factory>
声明让你指定一个值或者方法来绑定一个表达式,当它第一次被引用时,将被执行用来初始化一个context变量的值。
components>
factoryname="
contact"
method="
#{contactManager.loadContact}"
scope="
CONVERSATION"
/>
//声明让你指定一个值或者方法来绑定一个表达式,当它第一次被引用时,将被执行用来初始化一个context变量的值。
/components>
7.标签
1.分页
dataTableid="
listentitys"
var="
item"
value="
#{pageItems}"
cellpadding="
0"
cellspacing="
border="
styleClass="
main-table-1"
column>
<
facetname="
header"
//表头
panelGroupstyle="
text-align:
center"
<
selectBooleanCheckboxid="
sbcAll"
onclick="
CheckAll();
"
style="
border:
0px;
width:
15px;
height:
15px"
<
/h:
panelGroup>
/f:
facet>
verbatim>
spanstyle="
100%;
sbcSelRel"
value="
#{item.selected}"
cleares('
frmMain:
listentitys:
sbcAll'
)"
style="
selectBooleanCheckbox>
/span>
<
outputTextid="
headerText2"
出口销售合同号"
commandLinkvalue="
#{item.code}"
#{expcmFace.select}"
<
headerText8"
最迟装运期"
otSignssDate"
#{item.shipInfo.dateshipava}"
convertDateTimepattern="
yyyy-MM-dd"
outputText>
dataTable>
2.分页信息
%@includefile="
/business/pageTop.jsp"
%>
/business/pageBottom.jsp"
3.显示错误信息
%@includefile='
/system/main/errorMessage.jsp'
4.<
s:
validateAll>
标签是Seam特有的。
该JSF组件告诉JSF让它用实体Bean中所指定的Hibernat验证器注解来验证所有包含输入的字段;
JSF学习笔记
参数传递(主要指managed-bean和managed-bean之间)
(一)使用commandLink和param
commandLinkaction="
myAction"
(<
#{myBean01.myAction01}"
)
paramvalue="
#{myBean01.myProperty01}"
commandLink>
对myParam的使用有如下几种情况:
(1)
将其用于managed-bean的managed-property。
例如:
managed-property>
property-name>
myProperty02<
/property-name>
value>
#{param.myParam}<
/value>
/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.具体有两种方式:
使用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了。
使用ELResolver。
ELResolvereLResolver=facesContext.getApplication().getELResolver();
BeanClassNamemyBean01=(BeanClassName)eLResolver.getValue(eLContext,null,"
myBean01"
在JSF1.1中,使用VariableResolver实现类似功能,在JSF1.2中已经被deprecated了。
MyEclipse的Hibernate工具
对于SQLServer主键递增的表,使用MyEclipse的Hibernate自动生成工具生成的mapping文件时一般如下:
idtype="
java.lang.Long"
column/>
generatorclass="
assigned"
/id>
这时候需要手动修改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
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所修饰的对象范围:
2.ElementType的定义
是用来指定Annotation类型可以用在哪一些元素上的.说明一下:
TYPE(类型),FIELD(属性),METHOD(方法),PARAMETER(参数),CONSTRUCTO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSF 学习 笔记