I've a problem extendign the UISelectOne component...

My classes:

package holderTagClasses;


import javax.faces.application.Application;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;
import javax.faces.el.ValueBinding;
import javax.faces.event.ValueChangeEvent;
import javax.faces.webapp.UIComponentTag;
public class BDE_IAS_ComboTag extends UIComponentTag{

        String lista;
        String listaValores;
        String value;
        String valueChangeListener;

        public String getValueChangeListener() {
       return valueChangeListener;
   }

   public void setValueChangeListener(String valueChangeListener) {
       this.valueChangeListener = valueChangeListener;
   }

        public void setLista(String lista){
                this.lista=lista;
        }

        public String getLista(){
                return lista;
        }

        public void setListaValores(String lista){
                this.listaValores=lista;
        }

        public String getListaValores(){
                return listaValores;
        }

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

        public String getValue(){
                return value;
        }

        public void release() {
                // the super class method should be called
                super.release();
                lista=null;
                value=null;
                valueChangeListener=null;
                listaValores=null;
        }

        protected void setProperties(UIComponent component) {
                super.setProperties(component);

                if (lista != null) {
                        if (isValueReference(lista)) {
ValueBinding vb = FacesContext.getCurrentInstance().getApplication().createValueBinding(lista);
                                component.setValueBinding("lista", vb);
                        } else {
                                if(lista.length()==0){
                                        lista=null;
                                }
                                else{
                                        
component.getAttributes().put("lista",lista);
                                }
                        }
                }

                if (listaValores != null) {
                        if (isValueReference(listaValores)) {
ValueBinding vb =FacesContext.getCurrentInstance().getApplication().createValueBinding(listaValores);
                                component.setValueBinding("listaValores", vb);
                        } else {
                                if(listaValores.length()!=0){
                                        
component.getAttributes().put("listaValores",listaValores);
                                }
                                else{
                                        if(lista!=null){
                                                if(lista.length()>0){
ValueBinding vb =FacesContext.getCurrentInstance().getApplication().createValueBinding(lista);
                                                        
component.setValueBinding("listaValores", vb);
                                                }
                                        }
                                }
                        }
                }

                if (value!=null) {
                        if (isValueReference(value)) {
ValueBinding vb = FacesContext.getCurrentInstance().getApplication().createValueBinding(value);
                        component.setValueBinding("value", vb);
                        }
                        else {
                                if(value.length()==0){
                                        value=null;
                                }
                                else{
                                        
component.getAttributes().put("value",value);
                                }
                    }
            }


                if (valueChangeListener != null) {
           if (isValueReference(valueChangeListener)) {
                FacesContext context = FacesContext.getCurrentInstance();
                Application app = context.getApplication();
MethodBinding mb = app.createMethodBinding(valueChangeListener, new Class[] { ValueChangeEvent.class });
                component.getAttributes().put("valueChangeListener", mb);
           }
       }
        }

        public String getRendererType() { return "combo"; }
        public String getComponentType() { return "combo"; }

}




package rendererClasses;

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

import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.Renderer;


public class ComboRenderer extends Renderer{

public void encodeBegin(FacesContext context, UIComponent combo) throws IOException {
                ResponseWriter writer = context.getResponseWriter();
                char salto ='\n';

                try{
                        //ArrayList lista = (ArrayList)getLista();
                        ArrayList lista = 
(ArrayList)combo.getAttributes().get("lista");
                        ArrayList listaValores= new ArrayList();;
                        if(lista!=null){
                                listaValores = 
(ArrayList)combo.getAttributes().get("listaValores");
                                if(listaValores==null){
                                        listaValores=lista;
                                }
                                else{
                                        if(listaValores.size()==0){
                                                listaValores=lista;
                                        }
                                }
                        }

                        writer.startElement("select", combo);
                        writer.writeAttribute("name", combo.getId(), "id");
                        writer.writeAttribute("id", combo.getId(), "id");
                        writer.writeAttribute("size", new Integer(1), "size");
                        int i=0;
                        String valor;
                        for(i=0;i<lista.size();i++){
                                valor = 
(String)combo.getAttributes().get("value");
                                if(valor.equals(listaValores.get(i))){
writer.write("<option value=\""+listaValores.get(i)+"\" selected>"+lista.get(i)+"</option>"+salto);
                                }
                                else{
writer.write("<option value=\""+listaValores.get(i)+"\">"+lista.get(i)+"</option>"+salto);
                                }

                        }
                        writer.endElement("select");
                }
                catch(Exception e){
                        System.out.println(e);
                }

        }

        public void decode(FacesContext context, UIComponent component) {
                EditableValueHolder combo = (EditableValueHolder) component;
                Map requestMap = 
context.getExternalContext().getRequestParameterMap();
                String clientId = component.getClientId(context);

                if(requestMap.containsKey("Combo"+component.getId())){
String submittedValue = (String) requestMap.get("Combo"+component.getId());
                        combo.setSubmittedValue((String) 
requestMap.get(clientId));
                }
        }

}





package uIClasses;

import javax.faces.component.UISelectOne;




public class BDE_IAS_UICombo extends UISelectOne{


        public BDE_IAS_UICombo() {
                setRendererType("combo"); // this component has a renderer
        }
}


Faces-config:

<component>
        <component-type>combo</component-type>
        <component-class>uIClasses.BDE_IAS_UICombo</component-class>
   </component>

        <render-kit>
                <renderer>
                        
<component-family>javax.faces.component.UISelectOne</component-family>
                        <renderer-type>combo</renderer-type>
                        
<renderer-class>rendererClasses.ComboRenderer</renderer-class>
                </renderer>
        </render-kit>


TLD:

<tag>
                <name>combo</name>
                <tag-class>holderTagClasses.BDE_IAS_ComboTag</tag-class>
                <body-content>JSP</body-content>
                <attribute>
                        <name>lista</name>
                </attribute>
                <attribute>
                        <name>listaValores</name>
                </attribute>
                <attribute>
                        <name>value</name>
                </attribute>
                <attribute>
                        <name>valueChangeListener</name>
                </attribute>
                <attribute>
                        <name>id</name>
                        <required>true</required>
                </attribute>
        </tag>


Someone can help me???

The error I've recieved from the servlet is:

[15/09/05 12:00:45:645 CEST] 2c602c60 WebGroup E SRVE0026E: [Error de servlet]-[]: java.lang.NullPointerException
        at java.lang.Throwable.<init>(Throwable.java)
        at java.lang.Throwable.<init>(Throwable.java)
        at java.lang.NullPointerException.<init>(NullPointerException.java:61)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:675)
        at 
javax.faces.webapp.UIComponentTag.encodeBegin(UIComponentTag.java:572)
        at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:459)
at org.apache.jsp._pruebasIndividuales._jspService(pruebasIndividuales.jsp ) at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:344) at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:683) at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:781)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110) at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174) at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313) at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116) at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283) at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42) at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1019) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:592) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:204) at com.ibm.faces.context.MultipartExternalContextImpl.dispatch(MultipartExternalContextImpl.java:320) at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:295) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110) at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174) at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313) at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116) at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283) at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42) at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1019) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:592) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:204) at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:125) at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:286) at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71) at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182) at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334) at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56) at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:615)
        at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java)


But I'm unable to repair it...PLEASE HELP!!!! ;)


Reply via email to