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/

Reply via email to