Hello Anahide!
Thanks a lot for you rapid response, i took a look at my other widget
template "reintegra_boolean_radio_widget_template.xhtml" and the tag holding
the id="#{widget.id}" was "f:subview" and after change it to a div now it
can get the atributes but still can't found the component, the old error on
the screen has disappeared but now the stack trace show just the following
error:
ERROR [mx.org.reintegra.Validate] Cannot validate grupo etnico: input(s) not
found (component)
*My template reintegra_boolean_radio_widget_template.xhtml **now looks as
follows:*
<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"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:nxu="http://nuxeo.org/nxweb/util"
xmlns:nxdir="http://nuxeo.org/nxdirectory"
xmlns:nxl="http://nuxeo.org/nxforms/layout" id="#{widget.id}">
<c:if test="#{widget.mode == 'edit' }">
<h:selectOneRadio value="#{field}" id="#{widget.id}_checkbox"
onclick="evalua(this);">
<f:selectItem itemValue="#{true}" itemLabel="#{messages['label.yes']}"
/>
<f:selectItem itemValue="#{false}" itemLabel="#{messages['label.no']}"
/>
</h:selectOneRadio>
<h:message styleClass="errorMessage" for="#{widget.id}_checkbox"
id="#{widget.id}_message" />
</c:if>
<c:if test="#{widget.mode == 'view' }">
<h:outputText rendered="#{field}" value="#{messages['label.yes']}" />
<h:outputText rendered="#{! field}"
value="#{messages['label.no']}" />
</c:if>
</div>
On Thu, Oct 27, 2011 at 4:59 AM, Anahide Tchertchian <[email protected]
> wrote:
> 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/
> >
>
--
Jesus Ibañez
---
Mailing list: [email protected]
Forum: http://forum.nuxeo.org/f/1/