Menu

#897 Combobox, binding and selected item Fail in Java6 only

closed-fixed
nobody
5
2008-04-14
2008-03-04
Dmitriy Ch
No

https://sourceforge.net/forum/forum.php?thread_id=1957208&forum_id=510209

When I try use last example from this small talk: http://www.zkoss.org/smalltalks/comboboxEnhancement/ with ZK 3.0.3

I have exception:

java.lang.IndexOutOfBoundsException: Index: 0
java.util.AbstractSequentialList.get(Unknown Source)
org.zkoss.zul.Combobox.getItemAtIndex(Combobox.java:452)
org.zkoss.zkplus.databind.SelectedComboitemConverter.coerceToUi(SelectedComboitemConverter.java:63)
org.zkoss.zkplus.databind.Binding.myLoadAttribute(Binding.java:250)
org.zkoss.zkplus.databind.Binding.loadAttribute(Binding.java:233)
org.zkoss.zkplus.databind.DataBinder.loadAttrs(DataBinder.java:464)
org.zkoss.zkplus.databind.DataBinder.loadComponent(DataBinder.java:407)
org.zkoss.zkplus.databind.DataBinder.loadAll(DataBinder.java:440)
org.zkoss.zkplus.databind.AnnotateDataBinderInit.doAfterCompose(AnnotateDataBinderInit.java:70)
org.zkoss.zk.ui.impl.RealInits.doAfterCompose(Initiators.java:86)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:336)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:265)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:227)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:167)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

If to comment line "selected = orders.get(0);" then code works fine but 1st element not selected on page load.

Discussion

  • Jumper Chen

    Jumper Chen - 2008-03-07

    Logged In: YES
    user_id=1684431
    Originator: NO

    I cannot duplicate your issue.
    Please use the latest ZK Freshly version.

    /Jumper

     
  • Jumper Chen

    Jumper Chen - 2008-03-07
    • status: open --> wont-fix-works-for-me
     
  • Dmitriy Ch

    Dmitriy Ch - 2008-03-27

    Logged In: YES
    user_id=2025531
    Originator: YES

    Hello.
    Could you try to repeat this bug on code from small talk: http://zkoss.org/smalltalks/comboboxEnhancement/?

    I've tried on ver. 4.0.4 and I have such exception:

    Mar 27, 2008 8:42:14 PM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet zkLoader threw exception
    java.lang.IndexOutOfBoundsException: Index: 0
    at java.util.AbstractSequentialList.get(Unknown Source)
    at org.zkoss.zul.Combobox.getItemAtIndex(Combobox.java:457)
    at org.zkoss.zkplus.databind.SelectedComboitemConverter.coerceToUi(SelectedComboitemConverter.java:63)
    at org.zkoss.zkplus.databind.Binding.myLoadAttribute(Binding.java:251)
    at org.zkoss.zkplus.databind.Binding.loadAttribute(Binding.java:234)
    at org.zkoss.zkplus.databind.DataBinder.loadAttrs(DataBinder.java:467)
    at org.zkoss.zkplus.databind.DataBinder.loadComponent(DataBinder.java:410)
    at org.zkoss.zkplus.databind.DataBinder.loadAll(DataBinder.java:443)
    at org.zkoss.zkplus.databind.AnnotateDataBinderInit.doAfterCompose(AnnotateDataBinderInit.java:70)
    at org.zkoss.zk.ui.impl.RealInits.doAfterCompose(Initiators.java:86)
    at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:336)
    at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:265)
    at org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:227)
    at org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:167)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at com.sibers.cybertrax.filters.SecurityFilter.doFilter(SecurityFilter.java:45)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    at java.lang.Thread.run(Unknown Source)

    This code:

    <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>
    <window width="500px">

    <zscript>
    public class Order {
    private String _orderName;
    private String _orderNumber;
    public void setOrderName(String o) {
    _orderName = o;
    }
    public String getOrderName() {
    return _orderName;
    }
    public void setOrderNumber(String n) {
    _orderNumber = n;
    }
    public String getOrderNumber() {
    return _orderNumber;
    }
    }
    int count = 30;
    List orders = new LinkedList();
    for(int j= 0; j &lt; count; ++j) {
    Order o = new Order();
    o.setOrderName("OrderName - " + j );
    o.setOrderNumber("OrderNumber - " + j);
    orders.add(o);
    }
    selected = orders.get(0);
    </zscript>

    <combobox model="@{orders}" selectedItem="@{selected}" value="@{selected.orderName}">
    <comboitem self="@{each=order}" label="@{order.orderName}" value="@{order.orderNumber}"/>
    </combobox>
    <grid>
    <auxhead>
    <auxheader align="center" colspan="2">Order Information</auxheader>
    </auxhead>
    <columns>
    <column align="center" width="200px" label="Item"/>
    <column align="center" width="200px" label="Value"/>
    </columns>
    <rows>
    <row>OrderNumber: <label value="@{selected.orderNumber}"/></row>
    <row>OrderName: <label value="@{selected.orderName}"/></row>
    </rows>
    </grid>
    </window>

     
  • Dmitriy Ch

    Dmitriy Ch - 2008-03-27
    • status: wont-fix-works-for-me --> open-works-for-me
     
  • Jumper Chen

    Jumper Chen - 2008-04-02

    Logged In: YES
    user_id=1684431
    Originator: NO

    Did you use new ZK version from this URL? - http://sourceforge.net/project/showfiles.php?group_id=152762&package_id=169309

    In fact, I try both versions ZK 3.0.3 and ZK 3.0.4 and they all work well with your example.

    BTW, if you can't still work, please tell me more information about your environment.
    Thanks,
    Jumper

     
  • Jumper Chen

    Jumper Chen - 2008-04-02
    • status: open-works-for-me --> wont-fix-works-for-me
     
  • Dmitriy Ch

    Dmitriy Ch - 2008-04-10

    Logged In: YES
    user_id=2025531
    Originator: YES

    Thanks for your feedback! :-)

    Yes, I've also tried freshly version zk-3.0.5-FL-2008-04-08.
    My environment:
    Eclipse 3.3.0

    /usr/java/jre1.6.0_02/bin/java -version
    java version "1.6.0_02"
    Java(TM) SE Runtime Environment (build 1.6.0_02-b05)
    Java HotSpot(TM) Client VM (build 1.6.0_02-b05, mixed mode, sharing)

    tomcat-5.5.23

    ps aux | grep tomcat
    chagin 22542 1.2 3.4 233948 54136 pts/3 Sl+ 15:02 0:30 /usr/java/jre1.6.0_02/bin/java -Dcatalina.base=/home/chagin/Development/java/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1 -Dcatalina.home=/home/chagin/Development/java/apache-tomcat-5.5.23 -Dwtp.deploy=/home/chagin/Development/java/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps -Djava.endorsed.dirs=/home/chagin/Development/java/apache-tomcat-5.5.23/common/endorsed -classpath /home/chagin/Development/java/apache-tomcat-5.5.23/bin/bootstrap.jar org.apache.catalina.startup.Bootstrap start

    And I have such exception:
    java.lang.IndexOutOfBoundsException: Index: 0
    java.util.AbstractSequentialList.get(Unknown Source)
    org.zkoss.zul.Combobox.getItemAtIndex(Combobox.java:457)
    org.zkoss.zkplus.databind.SelectedComboitemConverter.coerceToUi(SelectedComboitemConverter.java:63)
    org.zkoss.zkplus.databind.Binding.myLoadAttribute(Binding.java:251)
    org.zkoss.zkplus.databind.Binding.loadAttribute(Binding.java:234)
    org.zkoss.zkplus.databind.DataBinder.loadAttrs(DataBinder.java:467)
    org.zkoss.zkplus.databind.DataBinder.loadComponent(DataBinder.java:410)
    org.zkoss.zkplus.databind.DataBinder.loadAll(DataBinder.java:443)
    org.zkoss.zkplus.databind.AnnotateDataBinderInit.doAfterCompose(AnnotateDataBinderInit.java:70)
    org.zkoss.zk.ui.impl.RealInits.doAfterCompose(Initiators.java:86)
    org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:336)
    org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:265)
    org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:227)
    org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:167)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

    When I added my own selected item converter:

    <combobox model="@{orders}" selectedItem="@{selected, converter='com.test.TestConverter'}" value="@{selected.orderName}">
    <comboitem self="@{each=order}" label="@{order.orderName}" value="@{order.orderNumber}"/>
    </combobox>

    And converter:

    public class TestConverter extends SelectedComboitemConverter {

    @Override
    public Object coerceToBean(Object val, Component comp) {
    System.out.println("coerce to bean");
    return super.coerceToBean(val, comp);
    }

    @Override
    public Object coerceToUi(Object val, Component comp) {
    System.out.println("val=" + val + ", " + "comp=" + comp);

    Combobox box = (Combobox) comp;
    System.out.println("model=" + box.getModel());

    List<Comboitem> items = box.getItems();
    System.out.println("items=" + items);

    if ( box.getItems().size() == 0 ) {
    return null;
    }

    return super.coerceToUi(val, comp);
    }

    }

    then I have such out:

    val=Order@10bc995, comp=<Combobox z_9j_2c>
    model=[Order@1257687, Order@88d319, Order@db38a4, Order@63a1ae, Order@10bc995, Order@df8b14, Order@23d08b, Order@1508f31, Order@1e8fa70, Order@91f0de, Order@15c929a, Order@9cd8db, Order@1612190, Order@1e29b99, Order@5585dc, Order@c736e4, Order@e4e358, Order@109dc35, Order@58213c, Order@1ee04fd, Order@1898115, Order@79b177, Order@1723c7f, Order@e1eae7, Order@523be, Order@16dba0a, Order@d0f59e, Order@ad5fab, Order@63f09e, Order@14a55e5]
    items=[]

    val=Order@10bc995, comp=<Combobox z_9j_2c>
    model=[Order@1257687, Order@88d319, Order@db38a4, Order@63a1ae, Order@10bc995, Order@df8b14, Order@23d08b, Order@1508f31, Order@1e8fa70, Order@91f0de, Order@15c929a, Order@9cd8db, Order@1612190, Order@1e29b99, Order@5585dc, Order@c736e4, Order@e4e358, Order@109dc35, Order@58213c, Order@1ee04fd, Order@1898115, Order@79b177, Order@1723c7f, Order@e1eae7, Order@523be, Order@16dba0a, Order@d0f59e, Order@ad5fab, Order@63f09e, Order@14a55e5]
    items=[<Comboitem @z_9j_3c0>, <Comboitem @z_9j_4c1>, <Comboitem @z_9j_5c2>, <Comboitem @z_9j_6c3>, <Comboitem @z_9j_7c4>, <Comboitem @z_9j_8c5>, <Comboitem @z_9j_9c6>, <Comboitem @z_9j_ac7>, <Comboitem @z_9j_bc8>, <Comboitem @z_9j_cc9>, <Comboitem @z_9j_dc10>, <Comboitem @z_9j_ec11>, <Comboitem @z_9j_fc12>, <Comboitem @z_9j_gc13>, <Comboitem @z_9j_hc14>, <Comboitem @z_9j_ic15>, <Comboitem @z_9j_jc16>, <Comboitem @z_9j_kc17>, <Comboitem @z_9j_lc18>, <Comboitem @z_9j_mc19>, <Comboitem @z_9j_nc20>, <Comboitem @z_9j_oc21>, <Comboitem @z_9j_pc22>, <Comboitem @z_9j_qc23>, <Comboitem @z_9j_rc24>, <Comboitem @z_9j_sc25>, <Comboitem @z_9j_tc26>, <Comboitem @z_9j_uc27>, <Comboitem @z_9j_vc28>, <Comboitem @z_9j_0d29>]
    coerce to bean

    So this converter was called 2 times. And for the first time combobox hasn't items :-)
    With this converter combobox works fine.

    May be I use invalid environment? :-)

    Thanks,
    Dmitriy

     
  • Dmitriy Ch

    Dmitriy Ch - 2008-04-10
    • status: wont-fix-works-for-me --> open-works-for-me
     
  • Jumper Chen

    Jumper Chen - 2008-04-11

    Logged In: YES
    user_id=1684431
    Originator: NO

    Could you export your project to run on a standalone Tomcat?
    And make sure the problem is caused by ZK or Eclipse.

    Thanks,
    Jumper

     
  • Dmitriy Ch

    Dmitriy Ch - 2008-04-11

    Logged In: YES
    user_id=2025531
    Originator: YES

    Could you try to deploy our WAR file? Please download it from this link:
    http://rapidshare.de/files/39084454/testApp.war.html

    We use ZK from zk-bin-3.0.5-FL-2008-04-08.zip.

    Thanks,
    Dmitriy

     
  • Jumper Chen

    Jumper Chen - 2008-04-14
    • summary: Combobox, binding and selected item --> Combobox, binding and selected item Fail in Java6 only
    • status: open-works-for-me --> closed-fixed
     
  • Jumper Chen

    Jumper Chen - 2008-04-14

    Logged In: YES
    user_id=1684431
    Originator: NO

    Fixed since 4/14.

    This bug is only caused by running Tomcat with Java 6.

     

Log in to post a comment.

MongoDB Logo MongoDB