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