You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by John <jo...@quivinco.com> on 2014/09/25 09:51:40 UTC

select component error java.lang.String cannot be cast to

Rendering a select component results in an exception. I have had to wrap the underlying class to implement the string I want to represent the entity in question, so maybe that has something to do with this issue, but the stack dump doesn't shed enough light.

It looks like toClient is passed a string and not the class instance?

John


pages.EmbWizard Render queue error in BeforeRenderTemplate[EmbWizard:wizard.venueworkchooser.pricelistitem]: java.lang.String cannot be cast to com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemOption
org.apache.tapestry5.ioc.internal.util.TapestryException: java.lang.String cannot be cast to com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemOption [at classpath:com/acme/webapps/bb/components/VenueWorkChooser.tml, line 19]
 at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:158)
 at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeforeRenderTemplatePhase.render(ComponentPageElementImpl.java:264)
 at org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
 at org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:124)
 at $PageRenderQueue_2c8b41df35ab4.render(Unknown Source)
 at $PageRenderQueue_2c8b41df35aa7.render(Unknown Source)
 at org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37)
...
 at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemOption
 at com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemEncoder.toClient(VenueWorkChooser.java:508)
 at org.apache.tapestry5.internal.util.SelectModelRenderer.option(SelectModelRenderer.java:51)
 at org.apache.tapestry5.util.AbstractSelectModel.visitOptions(AbstractSelectModel.java:54)
 at org.apache.tapestry5.util.AbstractSelectModel.visit(AbstractSelectModel.java:46)
 at org.apache.tapestry5.corelib.components.Select.options(Select.java:297)
 at org.apache.tapestry5.corelib.components.Select.beforeRenderTemplate(Select.java)
 at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeforeRenderTemplatePhase.invokeComponent(ComponentPageElementImpl.java:257)
 at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:148)
 ... 90 more
[WARN] TapestryModule.ComponentRequestHandler handlePageRender()Render queue error in BeforeRenderTemplate[EmbWizard:wizard.venueworkchooser.pricelistitem]: java.lang.String cannot be cast to com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemOption



            <div t:type="if" t:test="priceListItems">
                <t:form t:zone="^">
                    <t:select t:id="priceListItem" t:model="priceListItems" t:encoder="priceListItemEncoder" t:value="priceListItem" t:zone="venueChooserZone" t:blankOption="NEVER" class="chooser"/>
                </t:form>
            </div>




    public Set<PriceListItemOption> getPriceListItems() throws IllegalSessionStateException {
        String currentLocality = selectedLocality != null? selectedLocality
                : getPageCollections().localities.keySet().iterator().next();
        return getPageCollections().priceListItems.get(currentLocality);
    }




private class PriceListItemOption extends PriceListItem {

        public PriceListItemOption(int seq, int workId, int venueId, String description, String info, int duration, String locality, BigDecimal price, char ccode) {
            super(seq, workId, venueId, description, info, duration, locality, price, ccode);
        }

        @Override
        public String toString() {
            return getDurationAsString(getDuration()) + " " + getDescription()
                    + " " + getCcode() + getPrice();
        }
    }
    
    private class PriceListItemEncoder implements ValueEncoder<PriceListItemOption> {

        @Override
        public String toClient(PriceListItemOption option) {
            Integer id = option.getWorkId();
            return id == null ? null : id.toString();
        }

        @Override
        public PriceListItemOption toValue(String idAsString) {
            Integer workId = Integer.valueOf(idAsString);
            try {
                for (PriceListItemOption option
                        : getPageCollections().priceListItems.get(selectedLocality)) {
                    if (option.getWorkId() == workId) {
                        return option;
                    }
                }
            } catch (IllegalSessionStateException ex) {
                throw new RuntimeException(ex);
            }
            return null;
        }
    }    
}


---
This email is free from viruses and malware because avast! Antivirus protection is active.
http://www.avast.com

Re: select component error java.lang.String cannot be cast to

Posted by John <jo...@quivinco.com>.
Ah, it seems the select component must recieve a list and not a set.
  ----- Original Message ----- 
  From: John 
  To: users@tapestry.apache.org 
  Sent: Thursday, September 25, 2014 8:51 AM
  Subject: select component error java.lang.String cannot be cast to 


  Rendering a select component results in an exception. I have had to wrap the underlying class to implement the string I want to represent the entity in question, so maybe that has something to do with this issue, but the stack dump doesn't shed enough light.

  It looks like toClient is passed a string and not the class instance?

  John


  pages.EmbWizard Render queue error in BeforeRenderTemplate[EmbWizard:wizard.venueworkchooser.pricelistitem]: java.lang.String cannot be cast to com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemOption
  org.apache.tapestry5.ioc.internal.util.TapestryException: java.lang.String cannot be cast to com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemOption [at classpath:com/acme/webapps/bb/components/VenueWorkChooser.tml, line 19]
   at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:158)
   at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeforeRenderTemplatePhase.render(ComponentPageElementImpl.java:264)
   at org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
   at org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:124)
   at $PageRenderQueue_2c8b41df35ab4.render(Unknown Source)
   at $PageRenderQueue_2c8b41df35aa7.render(Unknown Source)
   at org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37)
  ...
   at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)
  Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemOption
   at com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemEncoder.toClient(VenueWorkChooser.java:508)
   at org.apache.tapestry5.internal.util.SelectModelRenderer.option(SelectModelRenderer.java:51)
   at org.apache.tapestry5.util.AbstractSelectModel.visitOptions(AbstractSelectModel.java:54)
   at org.apache.tapestry5.util.AbstractSelectModel.visit(AbstractSelectModel.java:46)
   at org.apache.tapestry5.corelib.components.Select.options(Select.java:297)
   at org.apache.tapestry5.corelib.components.Select.beforeRenderTemplate(Select.java)
   at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeforeRenderTemplatePhase.invokeComponent(ComponentPageElementImpl.java:257)
   at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:148)
   ... 90 more
  [WARN] TapestryModule.ComponentRequestHandler handlePageRender()Render queue error in BeforeRenderTemplate[EmbWizard:wizard.venueworkchooser.pricelistitem]: java.lang.String cannot be cast to com.acme.webapps.bb.components.VenueWorkChooser$PriceListItemOption



              <div t:type="if" t:test="priceListItems">
                  <t:form t:zone="^">
                      <t:select t:id="priceListItem" t:model="priceListItems" t:encoder="priceListItemEncoder" t:value="priceListItem" t:zone="venueChooserZone" t:blankOption="NEVER" class="chooser"/>
                  </t:form>
              </div>




      public Set<PriceListItemOption> getPriceListItems() throws IllegalSessionStateException {
          String currentLocality = selectedLocality != null? selectedLocality
                  : getPageCollections().localities.keySet().iterator().next();
          return getPageCollections().priceListItems.get(currentLocality);
      }




  private class PriceListItemOption extends PriceListItem {

          public PriceListItemOption(int seq, int workId, int venueId, String description, String info, int duration, String locality, BigDecimal price, char ccode) {
              super(seq, workId, venueId, description, info, duration, locality, price, ccode);
          }

          @Override
          public String toString() {
              return getDurationAsString(getDuration()) + " " + getDescription()
                      + " " + getCcode() + getPrice();
          }
      }
      
      private class PriceListItemEncoder implements ValueEncoder<PriceListItemOption> {

          @Override
          public String toClient(PriceListItemOption option) {
              Integer id = option.getWorkId();
              return id == null ? null : id.toString();
          }

          @Override
          public PriceListItemOption toValue(String idAsString) {
              Integer workId = Integer.valueOf(idAsString);
              try {
                  for (PriceListItemOption option
                          : getPageCollections().priceListItems.get(selectedLocality)) {
                      if (option.getWorkId() == workId) {
                          return option;
                      }
                  }
              } catch (IllegalSessionStateException ex) {
                  throw new RuntimeException(ex);
              }
              return null;
          }
      }    
  }


  ---
  This email is free from viruses and malware because avast! Antivirus protection is active.
  http://www.avast.com


---
This email is free from viruses and malware because avast! Antivirus protection is active.
http://www.avast.com