I have a very simple radiogroup backed by the enum (below is grossly
simplified & trimmed version from my project page), running on 5.0.10.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
<head>
<title>test</title>
</head>

<body>

        <h3>Web Registrations</h3>

        <t:form t:id="matchForm" t:clientValidation="false">
        <t:errors/>
        <t:radiogroup t:value="matchType" validate="required">
        <input type="radio" t:type="radio" t:value="easyMatch"/>Easy
        <input type="radio" t:type="radio" t:value="customerByIdMatch"/>By 
Customer ID
        </t:radiogroup>

        <input type="submit" t:type="submit" t:id="submitButton" 
value="Search"/>
        <input type="submit" t:type="submit" t:id="resetButton" value="Reset"/>

        </t:form>

</body>
</html>

public class Registrations {
        
        @Persist
        private MatchType _matchType;
        
        @Component
        private Form _matchForm;

        
        public MatchType getMatchType() {
                return _matchType;
        }

        public void setMatchType(MatchType aMatchType) {
                _matchType = aMatchType;
        }
        
        public MatchType getEasyMatch() {
                return MatchType.EASY;
        }
        
        public MatchType getCustomerByIdMatch() {
                return MatchType.BY_CUSTOMER_ID;
        }

        @OnEvent(component="matchForm",value="validateForm")
        void validateMatch() {
                if(_matchType == null) {
                        _matchForm.recordError("Indicate match type!");
                }
        }
        
        @OnEvent(component="resetButton",value="selected")
        void resetMatchForm() {
                _matchType = null;
                _matchForm.clearErrors();
        }
}

public enum MatchType {

        EASY, BY_CUSTOMER_ID
}


This very simple form works as expected until changes are made to
either the template or a backing java class while jetty is running.
For example, adding some string below <h3>..</h3>:

<h3>Web Registrations</h3>
Some live change to the template while Jetty is running...
<t:form t:id="matchForm" t:clientValidation="false">
....

still works if there is no value assigned to the radiogroup (form
hasn't been submitted). However, if either of the radio buttons has
been submitted, and above change is made Tapestry throws a weird
ClassCastException on the enum as below:

org.apache.tapestry.ioc.internal.util.TapestryException
com.kkamerica.workbench.pages.chweb.regfix.MatchType

java.lang.ClassCastException
com.kkamerica.workbench.pages.chweb.regfix.MatchType

Stack trace
com.kkamerica.workbench.pages.chweb.regfix.View.containingPageDidAttach(View.java)
org.apache.tapestry.internal.structure.ComponentPageElementImpl$2.run(ComponentPageElementImpl.java:71)
org.apache.tapestry.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:874)
org.apache.tapestry.internal.structure.ComponentPageElementImpl.containingPageDidAttach(ComponentPageElementImpl.java:706)
org.apache.tapestry.internal.structure.PageImpl.attached(PageImpl.java:146)
org.apache.tapestry.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:45)
org.apache.tapestry.internal.services.RequestEncodingInitializerImpl.initializeRequestEncoding(RequestEncodingInitializerImpl.java:41)
org.apache.tapestry.services.TapestryModule$39.handle(TapestryModule.java:2071)
org.apache.tapestry.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:131)
org.apache.tapestry.services.TapestryModule$13.service(TapestryModule.java:911)
org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43)
org.apache.tapestry.services.TapestryModule$3.service(TapestryModule.java:529)
org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:504)
org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:93)
org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84)
org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:891)
org.apache.tapestry.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1065)
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:185)
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:689)
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:391)
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:146)
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
org.mortbay.jetty.Server.handle(Server.java:285)
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:457)
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:765)
org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:627)
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357)
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:329)
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)

This also happens if hot deploy changes are made to a java class, for
instance adding a logger with some debugs would yield the same result.
My work around right now is to restart Jetty, but because of this I'm
loosing the whole benefit of on the fly changes Tapestry offers.

Is there a wrong setup on my part of an unexpected issue I've ran into?

-adam

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to