- 浏览: 385138 次
- 性别:
- 来自: 成都
最新评论
-
宋建勇:
你爷爷的,这个很给力啊!找了好久了!赞一个!
maven的属性过滤功能 -
蒲公英的约定:
其實也可以通過尋找id來得到組建,不過還是綁定方便得多。不知道 ...
JSF中UI控件binding属性的用法 -
蒲公英的约定:
...
JSF中UI控件binding属性的用法 -
le5u:
请问,怎么给tableviewer加行编号呀
tableviewer -
Surmounting:
现在火狐好像把 iframe 的 contentDocumen ...
iframe交互使用大全
意义:
代码创建和呈现JSF组件树的成功意味着,可以在页面动态的呈现各种JSF组件,如在用户交互后,根据用户需求产生界面.,或者用户自定义页面发布
好了,废话不多,直接进入正题
l JSF组件树创建与呈现
² 创建或者获取根
//从当前上下文获取
UIViewRoot root = facesContext.getViewRoot();
² 创建树
======在现有的根上创建======
用下行方法把组件对象组合起来
parentUIComponent.getChildrern().add(childUIComponent);
例子:
//***树***:根
UIViewRoot root = facesContext.getViewRoot();
//***树***:根/ scriptCollector1
UIComponent uic0 = (UIComponent) root.getChildren().iterator().next();
// uic0获得页面上已有的scriptCollector1,将在这之下创建自己的组件
//***树***:根/ scriptCollector1/ myTable1
HtmlDataTable myTable1 = new HtmlDataTable();
myTable1.setId("myTable1");
uic0.getChildren().add(myTable1); //组合到树上去
//table的Column1
UIColumn myColumn1 = new UIColumn();
myColumn1.setId("myColumn1");
myTable1.getChildren().add(myColumn1);
//Column1的Output
UIOutput myText1 = new UIOutput();
myText1.setId("myText1");
myColumn1.getChildren().add(myText1);
//table的Column2
UIColumn myColumn2 = new UIColumn();
myColumn2.setId("myColumn2");
myTable1.getChildren().add(myColumn2);
//Column2的Output
UIOutput myText2 = new UIOutput();
myText2.setId("myText2");
myColumn2.getChildren().add(myText2);
(例子 完)
² 呈现
组件的Encode()方法,自呈现
renderResponse(facesContext, root ) ; //呈现整个组件树
private void renderResponse(FacesContext context, UIComponent component) {
try {
component.encodeBegin(context); // encodeBegin
component.encodeChildren(context); // encodeChildren
Iterator kids = component.getChildren().iterator();
while (kids.hasNext()) {
UIComponent child = (UIComponent) kids.next();
renderResponse(context, child); //递归调用
}
component.encodeEnd(context); // encodeEnd
} catch (IOException e) {
e.printStackTrace();
}
}
² 字段数据绑定(表达式,绑定方法)
在数据表中,字段绑定值应为当前行的这个字段的值,不能固定为某个固定的值。
( 代码中不能调用setValue()来绑定数据,
这与页面标记内使用value="#{vardd3.GROUPTYPE}"绑定数据容易混淆 )
表达式创建使用ValueBinding对象
例子:
HtmlDataTable myTable1 = new HtmlDataTable();
myTable1.setId("myTable1");
myTable1.setValue(getDd3()); //获取SDO的数据源: getDd3()
myTable1.setVar("vardd33"); //产生了一个包含当前行数据的一个内部对象
//vardd33,在request域,取值的方法只可以内部组件
//之间完成 [内部当前行,重要的一个对象]
...... ......
...... ......
...... ......
//创建ValueBinding对象,放入表达式
ApplicationFactory factory = (ApplicationFactory) FactoryFinder
.getFactory(FactoryFinder.APPLICATION_FACTORY);
Application app = factory.getApplication();
ValueBinding binding1 = app.createValueBinding("#{vardd33.GROUPKEY}");
//表达式中把前面定义的内部当前行vardd33纳入计算
...... ......
...... ......
...... ......
//绑定数据到字段
UIColumn myColumn1 = new UIColumn();
myColumn1.setId("myColumn1");
myTable1.getChildren().add(myColumn1);
UIOutput myText1 = new UIOutput();
myText1.setId("myText1");
myText1.setValueBinding("value",binding1); //最关键的一句, value 是UIOutput
//隐藏的一个属性字段,这句话的意
//思是动态设置myText1
//的value为binding1的表达式
//#{vardd33.GROUPKEY}计算出的
//当前行vardd33的字段GROUPKEY
//的值
myColumn1.getChildren().add(myText1);
//注意: myText1.setValue(binding1),或者myText1.setValue(binding1.getValue(facesContext))都不能实现setValueBinding的功能。setValue始终是设定一个固定值。
页面上value="#{vardd3.GROUPTYPE}"这样写,肯定faces框架在后台遇到表达式就调用了setValueBinding方法,遇到值,就调用setValue方法。
//探讨ValueBinding对象
比如:
ValueBinding binding = application.createValueBinding("#{newvar}");
binding.setValue( facesContext, map );
(注释:假设这个map对象为{id=”test001”, name=”testName”}
ValueBinding binding1 = application.createValueBinding("#{newvar.id}");
ValueBinding binding2 = application.createValueBinding("#{newvar. name }");
那么
binding1.getValue(facesContext) 就是 ”test001”
binding2.getValue(facesContext) 就是 ” testName”
ValueBinding对象不仅可以引用已有的bean、bean的属性值,等 ……
还可以创建出新的属性对象newvar,供其他使用。
还有就是UIComponent setValueBinding(“newName”,binding)这个的“newName”如果不是属性字段的名称,就会创建这样的属性名称,getValueBinding(“newName” )也可以取出来
setValueBinding
public abstract void setValueBinding(java.lang.String name,
javax.faces.el.ValueBinding binding)
Set the ValueBinding used to calculate the value for the specified attribute or property name, if any.
Parameters:
name - Name of the attribute or property for which to set a ValueBinding
binding - The ValueBinding to set, or null to remove any currently set ValueBinding
Throws:
java.lang.IllegalArgumentException - if name is one of id or parent
java.lang.NullPointerException - if name is null
===========================
java.lang.IllegalArgumentException - if name is one of id or parent好像没有其效果,这里name我试了很多名字,包括组件的id,parent,都没有出现异常。
代码创建和呈现JSF组件树的成功意味着,可以在页面动态的呈现各种JSF组件,如在用户交互后,根据用户需求产生界面.,或者用户自定义页面发布
好了,废话不多,直接进入正题
l JSF组件树创建与呈现
² 创建或者获取根
//从当前上下文获取
UIViewRoot root = facesContext.getViewRoot();
² 创建树
======在现有的根上创建======
用下行方法把组件对象组合起来
parentUIComponent.getChildrern().add(childUIComponent);
例子:
//***树***:根
UIViewRoot root = facesContext.getViewRoot();
//***树***:根/ scriptCollector1
UIComponent uic0 = (UIComponent) root.getChildren().iterator().next();
// uic0获得页面上已有的scriptCollector1,将在这之下创建自己的组件
//***树***:根/ scriptCollector1/ myTable1
HtmlDataTable myTable1 = new HtmlDataTable();
myTable1.setId("myTable1");
uic0.getChildren().add(myTable1); //组合到树上去
//table的Column1
UIColumn myColumn1 = new UIColumn();
myColumn1.setId("myColumn1");
myTable1.getChildren().add(myColumn1);
//Column1的Output
UIOutput myText1 = new UIOutput();
myText1.setId("myText1");
myColumn1.getChildren().add(myText1);
//table的Column2
UIColumn myColumn2 = new UIColumn();
myColumn2.setId("myColumn2");
myTable1.getChildren().add(myColumn2);
//Column2的Output
UIOutput myText2 = new UIOutput();
myText2.setId("myText2");
myColumn2.getChildren().add(myText2);
(例子 完)
² 呈现
组件的Encode()方法,自呈现
renderResponse(facesContext, root ) ; //呈现整个组件树
private void renderResponse(FacesContext context, UIComponent component) {
try {
component.encodeBegin(context); // encodeBegin
component.encodeChildren(context); // encodeChildren
Iterator kids = component.getChildren().iterator();
while (kids.hasNext()) {
UIComponent child = (UIComponent) kids.next();
renderResponse(context, child); //递归调用
}
component.encodeEnd(context); // encodeEnd
} catch (IOException e) {
e.printStackTrace();
}
}
² 字段数据绑定(表达式,绑定方法)
在数据表中,字段绑定值应为当前行的这个字段的值,不能固定为某个固定的值。
( 代码中不能调用setValue()来绑定数据,
这与页面标记内使用value="#{vardd3.GROUPTYPE}"绑定数据容易混淆 )
表达式创建使用ValueBinding对象
例子:
HtmlDataTable myTable1 = new HtmlDataTable();
myTable1.setId("myTable1");
myTable1.setValue(getDd3()); //获取SDO的数据源: getDd3()
myTable1.setVar("vardd33"); //产生了一个包含当前行数据的一个内部对象
//vardd33,在request域,取值的方法只可以内部组件
//之间完成 [内部当前行,重要的一个对象]
...... ......
...... ......
...... ......
//创建ValueBinding对象,放入表达式
ApplicationFactory factory = (ApplicationFactory) FactoryFinder
.getFactory(FactoryFinder.APPLICATION_FACTORY);
Application app = factory.getApplication();
ValueBinding binding1 = app.createValueBinding("#{vardd33.GROUPKEY}");
//表达式中把前面定义的内部当前行vardd33纳入计算
...... ......
...... ......
...... ......
//绑定数据到字段
UIColumn myColumn1 = new UIColumn();
myColumn1.setId("myColumn1");
myTable1.getChildren().add(myColumn1);
UIOutput myText1 = new UIOutput();
myText1.setId("myText1");
myText1.setValueBinding("value",binding1); //最关键的一句, value 是UIOutput
//隐藏的一个属性字段,这句话的意
//思是动态设置myText1
//的value为binding1的表达式
//#{vardd33.GROUPKEY}计算出的
//当前行vardd33的字段GROUPKEY
//的值
myColumn1.getChildren().add(myText1);
//注意: myText1.setValue(binding1),或者myText1.setValue(binding1.getValue(facesContext))都不能实现setValueBinding的功能。setValue始终是设定一个固定值。
页面上value="#{vardd3.GROUPTYPE}"这样写,肯定faces框架在后台遇到表达式就调用了setValueBinding方法,遇到值,就调用setValue方法。
//探讨ValueBinding对象
比如:
ValueBinding binding = application.createValueBinding("#{newvar}");
binding.setValue( facesContext, map );
(注释:假设这个map对象为{id=”test001”, name=”testName”}
ValueBinding binding1 = application.createValueBinding("#{newvar.id}");
ValueBinding binding2 = application.createValueBinding("#{newvar. name }");
那么
binding1.getValue(facesContext) 就是 ”test001”
binding2.getValue(facesContext) 就是 ” testName”
ValueBinding对象不仅可以引用已有的bean、bean的属性值,等 ……
还可以创建出新的属性对象newvar,供其他使用。
还有就是UIComponent setValueBinding(“newName”,binding)这个的“newName”如果不是属性字段的名称,就会创建这样的属性名称,getValueBinding(“newName” )也可以取出来
setValueBinding
public abstract void setValueBinding(java.lang.String name,
javax.faces.el.ValueBinding binding)
Set the ValueBinding used to calculate the value for the specified attribute or property name, if any.
Parameters:
name - Name of the attribute or property for which to set a ValueBinding
binding - The ValueBinding to set, or null to remove any currently set ValueBinding
Throws:
java.lang.IllegalArgumentException - if name is one of id or parent
java.lang.NullPointerException - if name is null
===========================
java.lang.IllegalArgumentException - if name is one of id or parent好像没有其效果,这里name我试了很多名字,包括组件的id,parent,都没有出现异常。
发表评论
-
我的个人知识管理工具软件
2010-09-22 11:36 1358前些天看了一本书《你 ... -
SMART Goal Setting: A Surefire Way To Achieve Your Goals.
2009-12-25 09:22 2000Paragraf1 Internationally ... -
怎样把博客加入到搜索引擎中
2009-10-01 09:32 2130以下内容来自:http://blog.sina.com.cn ... -
tableviewer
2008-09-22 21:41 4294package aaa; import or ... -
eclipse 与 weblogic及tomcat的无插件断点调试
2008-08-29 22:08 1620一、eclipse 无需插件使用tomcat调试 第一步、配 ... -
TransactionDefinition
2008-08-21 10:24 2562/* Font definitions */ html ... -
动态创建FORM和表格
2008-08-18 21:20 2351<script> //helper fu ... -
Wicket
2008-08-14 13:23 1265目前存在的大多数Web框架对于服务端的状态管理都仅仅提供了较弱 ... -
javascript异步解决方案
2008-08-10 11:45 2375var cache = {}; function getArt ... -
免费在线网站性能测试工具大全
2008-06-22 16:24 7155网站代码验证工具1 . WDG HTML Validator ... -
找回回收站
2008-04-10 20:04 1327有时候进行某些误操作可能会让桌面的回收站消失 如果不想改注册 ... -
应该记住的
2008-04-06 14:31 1042计算机是不会被淘汰的,只要自己跟上发展的步伐就行了,那些30后 ... -
linux环境下安装cwp的地震专业软件su
2008-03-19 11:54 4334最近看到很多朋友因为装su(seismic unix)遇到问题 ... -
JAVA informix临时表的操作
2008-03-14 20:49 2604import java.sql.*; public cl ... -
天下第二
2008-01-30 15:58 1347... -
把信送给加西亚
2008-01-30 12:10 1031把信送给加西亚 http://www.cclw.net/fam ... -
通过IP地址获得主机名
2008-01-30 12:01 5035package org.jr.net; ... -
vc会遇到的一些问题
2007-12-25 11:24 12181:使用vc开发项目时,常 ... -
english articles
2007-12-20 09:37 1214Dear friend, I have a grea ... -
配置tomcat主目录有感
2007-12-19 19:33 2168以下小结使用tomcat5.0.28测试通过,tomcat安装 ...
相关推荐
下面将详细解释如何创建一个自定义JSF组件,包括组件的组成部分、标签库描述、属性处理类和组件类的创建。 一、自定义组件组成 一个完整的自定义JSF组件通常包括以下几个部分: 1. **标签库描述文件(TLD)**:...
一个完整的自定义JSF组件通常包含以下几个关键部分: 1. **页面显示代码**:在HTML或JSF页面中,你需要定义组件的呈现方式。例如,一个简单的自定义组件可能在HTML中表现为一个`<div>`元素,在JSF页面中则通过...
1. **JSF组件体系结构**:JSF组件是由UIComponent类及其子类构成的,每个组件都具有属性、事件和生命周期方法。理解这个体系结构是创建自定义组件的基础。 2. **创建自定义组件**:通常涉及以下步骤: - 定义Java...
UIComponent是JSF组件的基础类,代表用户界面中的一个可渲染元素。RenderKit则决定了组件如何在客户端呈现。源代码中,你可以看到各种预定义的UIComponent子类和RenderKit实现,了解它们如何协同工作。 4. **...
通过分析和运行这些代码,你将能更好地理解JSF框架的工作方式,学习如何创建、配置和使用JSF组件,以及如何处理用户交互和业务逻辑。这些实例对于初学者和有经验的开发者来说都是宝贵的资源,有助于加深对JSF的理解...
3. **JSP/JSF页面**:JSF应用的视图通常由JSP(JavaServer Pages)或Facelets文件构成,这些文件使用JSF组件库来创建用户界面。在"HelloJSF"中,可能有一个名为`HelloJSF.xhtml`的Facelets页面,它包含了`h:...
### JSF中自定义分页呈现器的实现与应用 #### 概述 JavaServer Faces(简称JSF)作为一项强大的Web应用开发框架,为Java开发者提供了构建动态Web应用程序的有效手段。JSF的一个显著特点在于它能够实现业务逻辑与...
4. **视图(View)**:视图是用户看到的界面,由JSP或Facelets页面组成,其中包含JSF组件。 5. **控制器(Controller)**:JSF的控制器主要由动作监听器(ActionListener)和动作事件(ActionEvent)组成,它们处理...
JSF组件通过JSF标记语言(JSF tags)在JSP或Facelets页面上声明,并且每个组件都有其特定的功能和属性。 2. **事件(Events)和监听器(Listeners)**:JSF允许组件之间通过事件进行通信。当一个组件触发事件时,...
1. **JSF组件**:JSF提供了一系列预定义的UI组件,如按钮、输入字段、表格等。开发者可以使用这些组件快速构建Web页面,并通过EL(Expression Language)表达式与后端数据绑定。 2. **生命周期**:JSF有请求处理、...
本文介绍了如何在JSF页面中使用JavaScript动态创建表格,并提供了详细的示例代码。通过这种方式,可以根据用户的操作实时更新表格内容,极大地提高了Web应用的灵活性和可用性。此外,还讨论了如何添加更复杂的表单...
通过这个入门指南,你可以学习到JSF的基础知识,包括如何创建简单的JSF应用程序、理解和使用JSF组件、配置和管理Managed Beans,以及掌握JSF生命周期和Ajax支持。继续深入研究,你将能够利用JSF构建高效、可维护的...
JSF组件经历了六步生命周期:恢复视图、应用请求值、处理验证、更新模型值、调用应用程序和呈现响应。每一步都提供了插入自定义行为的机会,如验证用户输入或执行业务逻辑。 **4. Facelets** Facelets是JSF的标准...
- **视图**:JSF页面(.xhtml)结合EL和JSF组件,呈现数据给用户。 - **控制层**:处理用户请求,通常通过Action或Navigation来控制流程。 **6. 学习与实践** 对于JSF初学者,这个博客项目提供了一个很好的起点。你...
通过创建自定义渲染器,我们可以控制JSF如何呈现特定的用户界面组件。 3. **分页**: 分页是一种将大量数据分成多个小块来显示的方法。每个小块称为一页,用户可以通过导航控件(如上一页、下一页等)在不同的页之间...
JSF组件有六个主要阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用事件和呈现响应。在这个过程中,JSF处理用户提交的数据,进行验证,更新模型,然后渲染响应。 ### PPT演示 PPT演示通常包含详细的...
JSF遵循MVC(Model-View-Controller)设计模式,将业务逻辑、视图呈现和用户交互分离开来,使得开发者能够更专注于各自领域的代码编写。JSF的核心组件包括UI组件、事件处理、数据绑定和转换验证。 ### 2. UI组件库 ...
这些源代码文件可能包含了JSF库的实现,包括核心类、组件库、以及与请求处理、渲染和状态管理相关的代码。 在JSF中,以下是一些重要的知识点: 1. **组件树**:JSF应用程序基于组件模型,UIComponent是所有组件的...
在设计阶段,可以通过RAD7的可视化编辑器来添加和配置JSF组件,包括数据树控件。控件的属性可以根据需求进行设置,如默认展开的层级、节点样式、事件处理等。数据绑定是关键一步,将数据模型与控件关联起来,确保...
系统可能利用JSF的各种组件来呈现题目、收集用户答案,并根据用户的回答进行评分。 JSF的组件模型是其一大特色,它提供了丰富的预定义组件库,如输入字段、按钮、表格等。开发者可以通过简单的XML配置或者在Java...