Hi,
The stack trace could help but i think your validation template is
giving the id of a JSF component which is not the input component
holding the value you need to perform the validation on.
You should check the widget template
"/widgets/reintegra_boolean_radio_widget_template.xhtml" and see what
tag holds the attribute id="#{widget.id}" => this should be the input
component instead (h:selectOnRadio i guess).
After that, if it still does not work and your component is not found,
check if it holds a f:subview tag and try to remove it by a non-naming
container tag (like a div, as done in your other widget template), as
it may interfere with the lookup strategy implemented by
UIComponent#findComponent.
I guess you took example on the default
boolean_radio_widget_template.xhtml file, it was not conceived to be
used in a cross validation check.On 27 October 2011 07:37, Jesus Ibañez <[email protected]> wrote: > Hello! > > I´m trying to validate fields of document at creation, but i get the error > at the screen as follows: > > /widgets/reintegra_etnico_validation_widget_template.xhtml @8,23 > validator="#{valida.grupoEtnico}": java.lang.ClassCastException: > javax.faces.component.UINamingContainer cannot be cast to > javax.faces.component.UIInput > > i have my widget template and code as follows: > > reintegra_etnico_validation_widget_template.xhtml: > > <div xmlns:f="http://java.sun.com/jsf/core" > xmlns:h="http://java.sun.com/jsf/html" > xmlns:c="http://java.sun.com/jstl/core"> > > <c:if test="#{widget.mode == 'edit'}"> > > <h:inputHidden value="needed" validator="#{valida.grupoEtnico}" > id="#{widget.id}"> > <f:attribute name="perteneceGrupoEtnicoId" > value="#{layout.widgetMap['perteneceGrupoEtnico'].id}" /> > <f:attribute name="grupoEtnicoId" > value="#{layout.widgetMap['grupoEtnico'].id}" /> > </h:inputHidden> > <h:message for="#{widget.id}" styleClass="errorMessage" /> > > </c:if> > > </div> > > > > > Layout: > > <widget name="perteneceGrupoEtnico" type="template"> > <labels> > <label mode="any">Pertenece a algún grupo étnico?</label> > </labels> > <translated>false</translated> > <fields> > <field>imputado:perteneceGrupoEtnico</field> > </fields> > <properties widgetMode="edit"> > <property > name="template">/widgets/reintegra_boolean_radio_widget_template.xhtml</property> > <property name="elementId">etnico</property> > <property name="required">true</property> > </properties> > <properties mode="any"/> > </widget> > <widget name="grupoEtnico" type="selectOneDirectory"> > <labels> > <label mode="any">Grupo étnico</label> > </labels> > <translated>false</translated> > <fields> > <field>imputado:grupoEtnico</field> > </fields> > <properties widgetMode="edit"> > <property name="localize">false</property> > <property name="directoryName">gEtnicos</property> > <property name="displayIdAndLabel">false</property> > <property name="ordering">label</property> > <property name="notDisplayDefaultOption">false</property> > <property name="displayObsoleteEntries">false</property> > <property name="required">false</property> > </properties> > <properties mode="any"/> > </widget> > <widget name="validaEtnico" type="template"> > <labels> > <label mode="any"></label> > </labels> > <translated>false</translated> > <fields/> > <properties widgetMode="edit"> > <property > name="template">/widgets/reintegra_etnico_validation_widget_template.xhtml</property> > </properties> > <properties mode="any"/> > </widget> > > > > > Bean: > > public void grupoEtnico(FacesContext context, UIComponent component, > Object value) { > Map<String, Object> attributes = component.getAttributes(); > String perteneceGrupoEtnicoInputId = (String) > attributes.get("perteneceGrupoEtnicoId"); > String grupoEtnicoInputId = (String) > attributes.get("grupoEtnicoId"); > if (perteneceGrupoEtnicoInputId == null || grupoEtnicoInputId == > null) { > log.error("Cannot validate grupo etnico: input id(s) not found > (attributes)"); > return; > } > > UIInput perteneceGrupoEtnicoComp = (UIInput) > component.findComponent(perteneceGrupoEtnicoInputId); > UIInput grupoEtnicoComp = (UIInput) > component.findComponent(grupoEtnicoInputId); > if (perteneceGrupoEtnicoComp == null || grupoEtnicoComp == null) { > log.error("Cannot validate grupo etnico: input(s) not found > (component)"); > return; > } > > Object perteneceGrupoEtnico = > perteneceGrupoEtnicoComp.getLocalValue(); > Object grupoEtnico = grupoEtnicoComp.getLocalValue(); > > if (perteneceGrupoEtnico == null || grupoEtnico == null) { > log.error("Cannot validate passwords: value(s) not found > (null)"); > return; > } > > FacesMessage message = new > FacesMessage(FacesMessage.SEVERITY_ERROR, "testing", null); > throw new ValidatorException(message); > > } > > what am i doing wrong? > Any help would be appreciate, thanks in advanced. > > > > -- > Jesus Ibañez > > > --- > Mailing list: [email protected] > Forum: http://forum.nuxeo.org/f/1/ > --- Mailing list: [email protected] Forum: http://forum.nuxeo.org/f/1/
