Hi Guy,

seems like you also don't know how UIData works. I can't believe you
getComponents ever return more than one component in the list?


guessing the htmlDataTableDayParts is the UIData, try this:


private boolean validateDayParts()
 {
   boolean isOk = true;
   HtmlSelectOneMenu htmlSelectOneMenuFrom =
htmlDataTableDayParts.findComponent(''hourFrom");
   HtmlSelectOneMenu htmlSelectOneMenuTo =
htmlDataTableDayParts.findComponent(''hourTo");

   for (int i = 0; i < htmlDataTableDayParts.getRowCount(); i++) {
     htmlDataTableDayParts.setRowIndex(i);
     if (htmlSelectOneMenuFrom.getValue().equals(-1) ||
htmlSelectOneMenuTo.getValue().equals(-1))
     {
       isOk = false;
       htmlSelectOneMenuFrom.setValid(false);
       
FacesUtil.addErrorMessage(htmlSelectOneMenuFrom.getClientId(FacesUtil.getFacesContext()),
           "#{bundle['cmp_targeting.time.fromTo.required']}");
     }

  }
  htmlDataTableDayParts.setRowIndex(-1); //  this is important
  return isOk;
}


But i still dont understand why you need this having the values in the model.


Regards,
    Volker



2008/6/7 Guy Bashan <[EMAIL PROTECTED]>:
> Hi Volker,
>
> Here are both methods I am using:
>  private List<UIComponent> getComponents(UIComponent rootComponent, String id)
>  {
>    List<UIComponent> components = rootComponent.getChildren();
>    List<UIComponent> result = new ArrayList<UIComponent>();
>    for (UIComponent component : components)
>    {
>      if (component.getId().equals(id))
>      {
>        result.add(component);
>      }
>
>      result.addAll(getComponents(component, id));
>    }
>
>    return result;
>  }
>
>  private boolean validateDayParts()
>  {
>    List<UIComponent> hoursFrom = getComponents(htmlDataTableDayParts, 
> "hourFrom");
>    List<UIComponent> hoursTo = getComponents(htmlDataTableDayParts, "hourTo");
>
>    boolean isOk = true;
>    for (int i = 0; i < hoursFrom.size(); i++)
>    {
>      HtmlSelectOneMenu htmlSelectOneMenuFrom = 
> (HtmlSelectOneMenu)hoursFrom.get(i);
>      HtmlSelectOneMenu htmlSelectOneMenuTo = 
> (HtmlSelectOneMenu)hoursTo.get(i);
>
>      if (htmlSelectOneMenuFrom.getValue().equals(-1) || 
> htmlSelectOneMenuTo.getValue().equals(-1))
>      {
>        isOk = false;
>        htmlSelectOneMenuFrom.setValid(false);
>        
> FacesUtil.addErrorMessage(htmlSelectOneMenuFrom.getClientId(FacesUtil.getFacesContext()),
>            "#{bundle['cmp_targeting.time.fromTo.required']}");
>      }
>    }
>
>    return isOk;
>  }
>
> I call the method "validateDayParts" from a saveAction method that is 
> activated when pressing a command link.
>
> Thanks,
> Guy.
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Volker Weber
> Sent: Saturday, June 07, 2008 9:41 PM
> To: MyFaces Discussion
> Subject: Re: Datatable binding problem
>
> Hi Guy,
>
> could you post your loop code?
>
>
> Regards,
>    Volker
>
>
>
> 2008/6/7 Guy Bashan <[EMAIL PROTECTED]>:
>> Hi again,
>>
>>
>>
>> In order to validate set of dropdowns in a datatable, I wrote a method to
>> extract all components with a specific id (under that datatable), then  scan
>> the returned values in a loop an and make sure values are properly set.
>>
>> The method is activated in the save action.
>>
>> It seems like the drop down component properties: "value" and
>> "submittedValue" are  null.
>>
>> (The data is passed to the bean objects properly and saved to database, but
>> when getting it directly from the component it returns a null value).
>>
>>
>>
>> Am I missing something?
>>
>>
>>
>> Thanks,
>>
>> Guy.
>>
>>
>>
>>
>>
>> From: Andrew Robinson [mailto:[EMAIL PROTECTED]
>> Sent: Saturday, June 07, 2008 4:50 PM
>> To: MyFaces Discussion
>> Subject: Re: Datatable binding problem
>>
>>
>>
>> You are not understanding how JSF databinding works. I'll give you a brief
>> overview, but I would strongly recommend that you stop development and read
>> some articles on control binding before continuing.
>>
>>
>>
>> The binding happens at component construction time, not render time. If this
>> does not click, then read my blog at http://andrewfacelets.blogspot.com.
>>
>>
>>
>> In your case, the binding happens when the component tree is built. Which
>> means that the data table has no data, no var that is set, etc. A data table
>> has only one set of components that are re-rendered for each value. There
>> are not new components for each value. Think of it as a swing tree that has
>> a node rendered that is called to render every node - there is only one.
>>
>> Sent from my iPod
>>
>> On Jun 7, 2008, at 2:53 AM, Guy Bashan <[EMAIL PROTECTED]> wrote:
>>
>> Hi All,
>>
>>
>>
>> I am having a little problem with datatable and binding.
>>
>>
>>
>> Here is the code:
>>
>>         <t:dataTable id="dayParts"
>> value="#{targetingParam.cmpTargetDayParts}"
>>
>>                      var="dayPart" cellpadding="0" cellspacing="0"
>> rowIndexVar="rowIndex">
>>
>>           <t:column style="height:30px" rendered="#{!dayPart.deleted}">
>>
>>             <h:selectOneMenu value="#{dayPart.startHour}"
>> onchange="updateTargetingActivity(#{rowIndexParam});"
>>
>>                              id="hourFrom" styleClass="mform"
>> style="width:75px;" converter="ByteConverter">
>>
>>               <f:selectItems value="#{cmp_targeting.dayPartHoursFrom}"/>
>>
>>             </h:selectOneMenu>
>>
>>             <div>
>>
>>               <h:message for="dayParts" errorClass="error_message" />
>>
>>             </div>
>>
>>           </t:column>
>>
>>   </t:dataTable>
>>
>>
>>
>> It works all fine, and I see a table with values on the screen. Now, when I
>> add binding to the dropdown:
>>
>> binding="#{dayPart.htmlSelectOneMenuDaypartFrom}"
>>
>>
>>
>> I get the following exception:
>>
>> org.apache.jasper.el.JspPropertyNotFoundException:
>> /cmp_targeting.jsp(593,12) '#{dayPart.htmlSelectOneMenuDaypartFrom}' Target
>> Unreachable, identifier 'dayPart' resolved to null
>>
>>                 at
>> org.apache.jasper.el.JspValueExpression.setValue(JspValueExpression.java:91)
>>
>>                 at
>> org.apache.myfaces.application.ApplicationImpl.createComponent(ApplicationImpl.java:315)
>>
>>                 at
>> javax.faces.webapp.UIComponentELTag.createComponent(UIComponentELTag.java:91)
>>
>>                 at
>> javax.faces.webapp.UIComponentClassicTagBase.findComponent(UIComponentClassicTagBase.java:1101)
>>
>>                 at
>> javax.faces.webapp.UIComponentClassicTagBase.doStartTag(UIComponentClassicTagBase.java:431)
>>
>>                 at
>> org.apache.jsp.cmp_005ftargeting_jsp._jspx_meth_h_005fselectOneMenu_005f1(cmp_005ftargeting_jsp.java:5394)
>>
>>                 at
>> org.apache.jsp.cmp_005ftargeting_jsp._jspx_meth_t_005fcolumn_005f4(cmp_005ftargeting_jsp.java:5343)
>>
>>                 at
>> org.apache.jsp.cmp_005ftargeting_jsp._jspx_meth_t_005fdataTable_005f3(cmp_005ftargeting_jsp.java:5290)
>>
>>                 at
>> org.apache.jsp.cmp_005ftargeting_jsp._jspService(cmp_005ftargeting_jsp.java:1042)
>>
>>                 at
>> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
>>
>>                 at
>> javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>>
>>                 at
>> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
>>
>>                 at
>> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
>>
>>                 at
>> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
>>
>>                 at
>> javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>
>>                 at
>> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
>>
>>                 at
>> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
>>
>>                 at
>> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
>>
>>                 at
>> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
>>
>>                 at
>> org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:338)
>>
>>                 at
>> org.apache.myfaces.application.jsp.JspViewHandlerImpl.buildView(JspViewHandlerImpl.java:481)
>>
>>                 at
>> org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:334)
>>
>>                 at
>> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
>>
>>                 at
>> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
>>
>>                 at
>> org.apache.myfaces.custom.ppr.PPRLifecycleWrapper.render(PPRLifecycleWrapper.java:84)
>>
>>                 at
>> javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>
>>                 at
>> com.todacell.ui.view.filter.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:149)
>>
>>                 at
>> com.todacell.ui.view.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:61)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>
>>                 at
>> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>
>>                 at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>>
>>                 at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>>
>>                 at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>>
>>                 at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>>
>>                 at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>>
>>                 at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
>>
>>                 at
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>>
>>                 at
>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
>>
>>                 at
>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>>
>>                 at java.lang.Thread.run(Thread.java:619)
>>
>>
>>
>> In the bean I have the following code:
>>
>> private transient HtmlSelectOneMenu htmlSelectOneMenuDaypartFrom;
>>
>>
>>
>>   public HtmlSelectOneMenu getHtmlSelectOneMenuDaypartFrom()
>>
>>   {
>>
>>     return htmlSelectOneMenuDaypartFrom;
>>
>>   }
>>
>>
>>
>>   public void setHtmlSelectOneMenuDaypartFrom(HtmlSelectOneMenu
>> htmlSelectOneMenuDaypartFrom)
>>
>>   {
>>
>>     this.htmlSelectOneMenuDaypartFrom = htmlSelectOneMenuDaypartFrom;
>>
>>   }
>>
>>
>>
>> i:embed'>  {
>>
>>     this.htmlSelectOneMenuDaypartFrom = htmlSelectOneMenuDaypartFrom;
>>
>>   }
>>
>>
>
>
>
> --
> inexso - information exchange solutions GmbH
> Bismarckstraße 13 | 26122 Oldenburg
> Tel.: +49 441 4082 356 |
> FAX: +49 441 4082 355 | www.inexso.de
>
>



-- 
inexso - information exchange solutions GmbH
Bismarckstraße 13 | 26122 Oldenburg
Tel.: +49 441 4082 356 |
FAX: +49 441 4082 355 | www.inexso.de

Reply via email to