编写JSF自定义复合组件的技巧和窍门 - 编程入门网
编写JSF自定义复合组件的技巧和窍门(4)时间:2011-11-02 IBM从 表 1 可以看出,一个组件基类通常对应于多个渲染器类型(如果使用 HTML 作为标记语言,即对 应于多个 HTML 元素),因为组件基类只定义了通用的数据和行为。比如说,UICommand 有两个 HTML 子 类 HtmlCommandButton 和 HtmlCommandLink,分别对应于渲染器类型 javax.faces.Link 和 javax.faces.Button .当我们想在一个复合组件内部包含一个链接时,只需要创建一个 UICommand 实例 ,并将其渲染器类型设置为 javax.faces.Link,而不用从头覆盖实现 encodeBegin() 和 decode() 方法。清单 2 列出了 Value Scroller 中的子组件如何在组件类 ValueScroller 中被创建,以及渲染器 等属性如何被设定。 清单 2. 重用标准渲染器创建自定义复合组件 private static final String PANEL_GRID_RENDERER = "javax.faces.Grid"; private static final String INPUT_TEXT_RENDERER = "javax.faces.Text"; private static final String COMMAND_LINK_RENDERER = "javax.faces.Link"; private static final String GRAPHIC_IMAGE_RENDERER = "javax.faces.Image"; /** * Add children to the base container * */ private void addChildrenAndFaces() { // Set attributes of the base container this.setRendererType(PANEL_GRID_RENDERER); this.getAttributes().put(COLUMNS_ATTRIBUTE, new Integer(2)); // Add the input component input = new UIInput(); input.setId(INPUT_ID); input.setRendererType(INPUT_TEXT_RENDERER); this.getChildren().add(input); // Add the container of the up and down links UIPanel linkContainer = new UIPanel(); linkContainer.setId(LINKPANEL_ID); linkContainer.setRendererType(PANEL_GRID_RENDERER); linkContainer.getAttributes().put(COLUMNS_ATTRIBUTE, new Integer(1)); ScrollerActionListener listener = new ScrollerActionListener(); // Add the up link UICommand upLink = new UICommand(); upLink.setId(UPLINK_ID); upLink.setRendererType(COMMAND_LINK_RENDERER); upLink.addActionListener(listener); UIGraphic upImage = new UIGraphic(); upImage.setId(UPIMAGE_ID); upImage.setRendererType(GRAPHIC_IMAGE_RENDERER); upImage.setUrl(UPIMAGE_URL); upLink.getChildren().add(upImage); linkContainer.getChildren().add(upLink); // Add the down link UICommand downLink = new UICommand(); downLink.setId(DOWNLINK_ID); downLink.setRendererType(COMMAND_LINK_RENDERER); downLink.addActionListener(listener); UIGraphic downImage = new UIGraphic(); downImage.setId(DOWNIMAGE_ID); downImage.setRendererType(GRAPHIC_IMAGE_RENDERER); downImage.setUrl(DOWNIMAGE_URL); downLink.getChildren().add(downImage); linkContainer.getChildren().add(downLink); this.getChildren().add(linkContainer); } 编写JSF自定义复合组件的技巧和窍门(5)时间:2011-11-02 IBM将属性值传递给标准组件 我们先看一下标签描述文件(TLD)中定义的 Value Scroller 提供的属性。 清单 3. 在 TLD 中定义自定义复合组件的属性 <tag> <name>valueScroller</name> <tag-class>component.taglib.ValueScrollerTag</tag-class> <body-content>JSP</body-content> |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |