Hi David,
Nothing better than a good night for the soul (and the body ;o). I was a little
upset yesterday night, and I briefly explained why.
This said I understand that the current enhancements in the Converter or the
Freamework in general are great. I see of much care is
taken to avoid this kind of issues by testing every details, and explaining how
to do the same. That's all great and we know all
that IT is not Math and that despite all our efforts this will always happen
one day or another.
By chance, in our case no lifes are in danger. I think about cars, they put so
much electronics in them. It's certainly good for the
business, not sure for drivers and theirs passengers. I was listening an expert
yesterday at TV. There are some cases which are ok,
even if the electronic is screwed anyway at least if it works it may save your
life. There are others cases wich are really
questionable. 2 small examples: in the last second on an opened road without
anybody but you and a bend, if you are losing the
control of your car (ice, etc.) some embedded systems may save your life. But
what about this case : on an higway someone for any
reason suddenly change of lane, instinctively you try to escape this "fool"
(he/r may have h/her own reason) by turning the
steering-wheel abruptly, but an embedded system thinks that you are losing the
control and force you to keep your lane: big crash in
the higway, many deaths. Of course I don't speak about all this issues you get
when you car begin to age...
Don't try to look for analogies here, I simply coul'd not resist to tell this
story I heard. I'm sure there are already good
cartoons that explain that better than me :o)
I have createe https://issues.apache.org/jira/browse/OFBIZ-3486 to make things
clearer. I will be back in 4 days, then maybe a good
surprise. Have fun
Jacques
From: "David E Jones" <[email protected]>
No, you may be right. I haven't tested it, but your list should contain
GenericValue objects that implement the Map interface and
can be treated as Maps, and the list-options tag should accept those fine.
Somewhere, either in the query/find operation or in the
list-options iterating something is breaking this, and while I don't know if it
is the conversion stuff or not it could be.
The best bet is to make it easy for others to reproduce it, perhaps by creating
an issue that has a patch and instructions for
applying and running it. It's great that you've nailed it down to where
reverting to a certain revision makes it work, that should
be useful for tracking down the cause of this.
-David
On Feb 17, 2010, at 5:51 PM, Jacques Le Roux wrote:
Yes, actually it's a List of GenericValues returned by
CommonWorkers.getAssociatedStateList()
The problem is that this was working at r909312. I call this a regression,
maybe it was wrong in the middle before, but it
worked.
Jacques
From: "David E Jones" <[email protected]>
Jacques,
It looks like the list you are trying to use in the drop-down contains
something other than a Map.
-David
On Feb 17, 2010, at 5:03 PM, Jacques Le Roux wrote:
Missed the more important part, here it is
---- cause ---------------------------------------------------------------------
Exception: java.lang.ClassCastException
Message: Not a map
---- stack trace ---------------------------------------------------------------
java.lang.ClassCastException: Not a map
org.ofbiz.base.util.UtilGenerics.checkMap(UtilGenerics.java:77)
org.ofbiz.widget.form.ModelFormField$ListOptions.addOptionValues(ModelFormField.java:1648)
org.ofbiz.widget.form.ModelFormField$FieldInfoWithOptions.getAllOptionValues(ModelFormField.java:1529)
org.ofbiz.widget.form.MacroFormRenderer.renderDropDownField(MacroFormRenderer.java:666)
org.ofbiz.widget.form.ModelFormField$DropDownField.renderFieldString(ModelFormField.java:3043)
org.ofbiz.widget.form.ModelFormField.renderFieldString(ModelFormField.java:595)
org.ofbiz.widget.form.ModelForm.renderSingleFormString(ModelForm.java:1054)
org.ofbiz.widget.form.ModelForm.renderFormString(ModelForm.java:837)
org.ofbiz.widget.screen.ModelScreenWidget$Form.renderWidgetString(ModelScreenWidget.java:841)
org.ofbiz.widget.screen.MacroScreenRenderer.renderScreenletSubWidget(MacroScreenRenderer.java:704)
org.ofbiz.widget.screen.ModelScreenWidget$Screenlet.renderWidgetString(ModelScreenWidget.java:408)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$DecoratorSection.renderWidgetString(ModelScreenWidget.java:704)
org.ofbiz.widget.screen.ModelScreenWidget$SectionsRenderer.render(ModelScreenWidget.java:167)
org.ofbiz.widget.screen.ModelScreenWidget$DecoratorSectionInclude.renderWidgetString(ModelScreenWidget.java:736)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:228)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$DecoratorSection.renderWidgetString(ModelScreenWidget.java:704)
org.ofbiz.widget.screen.ModelScreenWidget$SectionsRenderer.render(ModelScreenWidget.java:167)
org.ofbiz.widget.screen.ModelScreenWidget$DecoratorSectionInclude.renderWidgetString(ModelScreenWidget.java:736)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Container.renderWidgetString(ModelScreenWidget.java:296)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:228)
org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:394)
org.ofbiz.widget.screen.ModelScreenWidget$IncludeScreen.renderWidgetString(ModelScreenWidget.java:576)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:228)
org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:394)
org.ofbiz.widget.screen.ModelScreenWidget$DecoratorScreen.renderWidgetString(ModelScreenWidget.java:672)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:228)
org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:394)
org.ofbiz.widget.screen.ModelScreenWidget$DecoratorScreen.renderWidgetString(ModelScreenWidget.java:672)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:228)
org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:394)
org.ofbiz.widget.screen.ScreenRenderer.render(ScreenRenderer.java:135)
org.ofbiz.widget.screen.ScreenRenderer.render(ScreenRenderer.java:97)
org.ofbiz.widget.screen.MacroScreenViewHandler.render(MacroScreenViewHandler.java:104)
org.ofbiz.webapp.control.RequestHandler.renderView(RequestHandler.java:835)
org.ofbiz.webapp.control.RequestHandler.doRequest(RequestHandler.java:554)
org.ofbiz.webapp.control.ControlServlet.doGet(ControlServlet.java:223)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.ofbiz.webapp.control.ContextFilter.doFilter(ContextFilter.java:266)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:619)
--------------------------------------------------------------------------------
Jacques
From: "Jacques Le Roux" <[email protected]>
I did not reproduce with the lists used in the trunk OOTB (I tried Party Roles
and Invoice Items)
But I can reproduce at r911227
I create a states list using (for instance)
<set field="states" value="${groovy: postalAddress?.countryGeoId ?
org.ofbiz.common.CommonWorkers.getAssociatedStateList(delegator,
postalAddress.countryGeoId) : org.ofbiz.common.CommonWorkers.getAssociatedStateList(delegator,
null)}" type="List"/>
and I use it in (slightly changed for custom labels)
<field use-when="states!=null" name="stateProvinceGeoId"
title="${uiLabelMap.StateWithSpacesPrefix}"
tooltip="${uiLabelMap.Required}" widget-style="required">
<drop-down allow-empty="false">
<list-options list-name="states" key-name="geoId"
description="${geoName}"/>
</drop-down>
</field>
I get
2010-02-18 00:58:04,734 (http-0.0.0.0-8443-4) [
ModelScreen.java:399:ERROR] Error rendering screen
[component://common/widget/CommonScreens.xml#GlobalDecorator]:
java.lang.ClassCastException: Not a map
. Rolling back transaction.
2010-02-18 00:58:04,734 (http-0.0.0.0-8443-4) [
TransactionUtil.java:372:WARN ]
---- exception report ----------------------------------------------------------
[TransactionUtil.setRollbackOnly] Calling transaction setRollbackOnly; this
stack trace shows where this is happening:
Exception: java.lang.Exception
Message: Error rendering screen
[component://common/widget/CommonScreens.xml#GlobalDecorator]:
java.lang.ClassCastException:
Not a
map
---- stack trace ---------------------------------------------------------------
java.lang.Exception: Error rendering screen
[component://common/widget/CommonScreens.xml#GlobalDecorator]:
java.lang.ClassCastException: Not a map
org.ofbiz.entity.transaction.TransactionUtil.setRollbackOnly(TransactionUtil.java:372)
org.ofbiz.entity.transaction.TransactionUtil.rollback(TransactionUtil.java:319)
org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:402)
org.ofbiz.widget.screen.ModelScreenWidget$IncludeScreen.renderWidgetString(ModelScreenWidget.java:576)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:228)
org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:394)
org.ofbiz.widget.screen.ModelScreenWidget$DecoratorScreen.renderWidgetString(ModelScreenWidget.java:672)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:228)
org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:394)
org.ofbiz.widget.screen.ModelScreenWidget$DecoratorScreen.renderWidgetString(ModelScreenWidget.java:672)
org.ofbiz.widget.screen.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:137)
org.ofbiz.widget.screen.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:228)
org.ofbiz.widget.screen.ModelScreen.renderScreenString(ModelScreen.java:394)
org.ofbiz.widget.screen.ScreenRenderer.render(ScreenRenderer.java:135)
org.ofbiz.widget.screen.ScreenRenderer.render(ScreenRenderer.java:97)
org.ofbiz.widget.screen.MacroScreenViewHandler.render(MacroScreenViewHandler.java:104)
org.ofbiz.webapp.control.RequestHandler.renderView(RequestHandler.java:835)
org.ofbiz.webapp.control.RequestHandler.doRequest(RequestHandler.java:554)
org.ofbiz.webapp.control.ControlServlet.doGet(ControlServlet.java:223)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.ofbiz.webapp.control.ContextFilter.doFilter(ContextFilter.java:266)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:619)
HTH (I can't do more right now)
Jacques
From: "Jacques Le Roux" <[email protected]>
I'm workin on it :/
Just a little annoying as it's past midnight here and my wife will be waiting
me tomorrow morning for our 4 vacation days she
is
waiting for so long... Life...
Jacques
From: "Adam Heath" <[email protected]>
Jacques Le Roux wrote:
Hi,
I have a problem with the recent converter changes I guess. In a custom
application where I use a <list-options I get an error
saying it's not a Map.
This is woirking if I revert to r909312. I will try to reproduce on a
local update instance, I'm quite sure it's reproductible in the trunk
Unfortunately I can't help much on this right now as I will be in
vacation for 4 days begining tonigh and it's already rather late here.
It would be nice to have more info on this, like at the very least
what actual version you were running, not just one that happened to
work for you.
For reference, there was a point where I changed how the converters
worked, to be different than what Adrian initially designed. Last
week, I ended up undoing most of those modifications, and implemented
my features in a different way, that shouldn't affect anyone else.