现在的位置: 首页 > 综合 > 正文

jsf自定义组件-jafyear选择年份

2013年09月11日 ⁄ 综合 ⁄ 共 4519字 ⁄ 字号 评论关闭

 

就是一个下拉框,可以配置选取的范围,用today表示当期年份,输入简单表达式。 

 

package com.cfcc.jaf.webx.component.jafdate.jafyear;

import javax.faces.component.UIComponentBase;
import javax.faces.context.FacesContext;

/**
 * 年份选择框组件
 * 
@author qinjinwei
 * $date 2007-9-12 上午09:52:28
 
*/

public class JafYear extends UIComponentBase {
    
    
public final String JAF_DATE_FAMILY = "jaf.jafdate";

    
public String getFamily() {
        
return JAF_DATE_FAMILY;
    }

    
    
public Object saveState(FacesContext context) {
        Object values[] 
= new Object[1];
        values[
0= super.saveState(context);
        
return values;
    }


    
public void restoreState(FacesContext context, Object state) {
        Object values[] 
= (Object[]) state;
        
super.restoreState(context, values[0]);

    }


}

 

package com.cfcc.jaf.webx.component.jafdate.jafyear;

import java.io.IOException;
import java.util.Date;
import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.el.ValueBinding;

import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRenderer;

/**
 * 年份选择框组件renderer
 * 
@author qinjinwei
 * $date 2007-9-12 上午09:52:30
 
*/

public class JafYearRenderer extends HtmlRenderer {

    
public void encodeEnd(FacesContext facesContext, UIComponent component)
            
throws IOException {
        
        String sfrom 
= (String) component.getAttributes().get("from");
        String sto 
= (String) component.getAttributes().get("to");
        
int ifrom = convert(sfrom) + 1900;
        
int ito = convert(sto) + 1900;
        ResponseWriter writer 
= facesContext.getResponseWriter();
        String clientId 
= component.getClientId(facesContext);
        
        
        ValueBinding vb 
= component.getValueBinding("value");
        String syear 
= (String) vb.getValue(facesContext);
        
if(syear == null)
        
{
            syear 
= "" + (new Date().getYear() + 1900 );
        }

        
        
int year = Integer.parseInt(syear);

        writer.write(
"<select id="" + clientId + "" name="" + clientId + ""> ");
        
for (int i = ifrom; i <= ito; i++{
            writer.write(
"<option value="" + i + """);
            
if(year == i)
            
{
                writer.write(
" selected ");
            }

            writer.write(
">" + i );
            writer.write(
"年</option> ");
        }

        writer.write(
"</select>");
    }

    
    
public void decode(FacesContext facesContext, UIComponent uiComponent)
    
{
        Map paramMap 
= facesContext.getExternalContext()
        .getRequestParameterMap();
        String clientId 
= uiComponent.getClientId(facesContext);
        
if(paramMap.containsKey(clientId))
        
{
            String value 
= (String) paramMap
                    .get(clientId);
            
            ValueBinding vb 
= uiComponent.getValueBinding("value");
            vb.setValue(facesContext, value);
            System.out.println(clientId 
+ " value is: " + value);
        }

    }


    
private int convert(String exp) {

        
boolean bflagt = false;
        
boolean bflags = false;

        String ex 
= exp.replaceAll(" """);
        
if (ex.startsWith("today")) {
            bflagt 
= true;
            ex 
= ex.replaceAll("today""");
        }

        
        
if (ex.startsWith("+")) {
            bflags 
= true;
        }

        
        ex 
= ex.substring(1, ex.length());

        
int rvalue = Integer.parseInt(ex);
        
if(!bflags)
        
{
            rvalue 
= - rvalue;
        }


        
if (bflagt)
            rvalue 
= rvalue + new Date().getYear();

        
return rvalue;
    }

}

 

package com.cfcc.jaf.webx.component.jafdate.jafyear;

import javax.faces.application.Application;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.webapp.UIComponentTag;

/**
 * 年份选择框组件的标签
 * 
@author qinjinwei
 * $date 2007-9-12 上午09:52:36
 
*/

public class JafYearTag extends UIComponentTag
{
    
    
public String getComponentType()
    
{
        
return "com.cfcc.jaf.webx.component.jafdate.jafyear.JafYear";
    }


    
public String getRendererType()
    
{
        
return "com.cfcc.jaf.webx.component.jafdate.jafyear.JafYearRenderer";
    }

    
    
private String from;
    
private String to;
    
private String value;
    
    
public String getValue() {
        
return value;
    }


    
public void setValue(String value) {
        
this.value = value;
    }


    
public String getFrom() {
        
return from;
    }


    
public void setFrom(String from) {
        

抱歉!评论已关闭.