上篇介绍了Tag类及tld文件的开发,本篇将介绍Compmonent类的开发。
Tag类主要作用是从页面标签接收值,Component类的主要作用为在Server端保存及恢复组件状态。
在Tag类中主要需实现getComponentType,getRendererType,setProperties及属性的set方法,Component类主要需实现的方法包括:getFamily,saveState,restoreState和属性的get/set方法。
本例中Component类直接继承HtmlInputText类,代码如下:
- package net.moon.jsf.customer.component;
- import javax.faces.component.html.HtmlInputText;
- import javax.faces.context.FacesContext;
- public class HtmlDropdownList extends HtmlInputText {
- private static final String FAMILY_NAME = "DropdownList";
- private String valueList = null;
- public void setValueList(String valueList) {
- this.valueList = valueList;
- }
- private String image = null;
- public String getValueList() {
- return valueList;
- }
- public String getImage() {
- return image;
- }
- public void setImage(String image) {
- this.image = image;
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- }
- public HtmlDropdownList() {
- super();
- // TODO Auto-generated constructor stub
- }
- @Override
- public String getFamily() {
- return FAMILY_NAME;
- }
- @Override
- public void restoreState(FacesContext _context, Object _state) {
- // TODO Auto-generated method stub
- Object[] value = (Object[]) _state;
- super.restoreState(_context, value[0]);
- valueList = (String) value[1];
- image = (String) value[2];
- }
- @Override
- public Object saveState(FacesContext _context) {
- // TODO Auto-generated method stub
- Object[] value = new Object[3];
- value[0] = super.saveState(_context);
- value[1] = valueList;
- value[2] = image;
- return value;
- }
- }
下篇将介绍JSF组件开发的Renderer类实现。