Unfortunately the workaround causes bigger problems.

The URL it creates for the next oage is
        http://localhost:8180/jumpstart/examples/input/basicinput2//
instead of
        http://localhost:8180/jumpstart/examples/input/basicinput2/null/null

The side effects are:

1. The PageLinks on the page are no longer resolvable. eg.
        <a t:type="pagelink" t:page="Start" href="#">To Start</a>
is interpreted as
        http://localhost:8180/jumpstart/examples/input/start
instead of
        http://localhost:8180/jumpstart/start

2. Default stylesheet isn't loaded.

I'll add this to the JIRA ticket in case it influences the solution.

On 25/01/2008, at 3:40 AM, Howard Lewis Ship wrote:

This is a bug, please add an issue.

It is not quite a show stopper.

The difference is that blank fields used to show up as the empty
string and are now showing up in the properties as null.

This could be addressed by a different NullFieldStrategy.  Perhaps
Tapestry should detect that the field is of type String and use
NullFieldStrategy that converts blank fields to the empty string.

In any case, a workaround is:

Object onSuccess() {

   if (_firstName == null) _firstName = "";
   if (_lastName == null) _lastName = "";

                _basicInput2.onActivate(_firstName, _lastName);
                return _basicInput2;
        }




On Jan 24, 2008 4:18 AM, Geoff Callender
<[EMAIL PROTECTED]> wrote:
First, is it OK to use the dev list in this way, given that 5.0.9 is
up for a vote?

Second, trying 5.0.9, I'm getting NullPointerException when a
TextField is left empty.  This wasn't the case in 5.0.7.  I haven't
tried the "translate" or "nulls" attribute of TextField but I figured
this is the ultimate basic case so I shouldn't need to.

Have I misunderstood what's required of TextField in 5.0.9?

Here's the form.  The exception occurs if either TextField is left
empty or only spaces are entered:

       <form t:type="form" t:id="form">
               <table>
                       <tr>
                               <td>First Name:</td>
<td><input t:type="TextField" value="firstName"/></td>
                       </tr>
                       <tr>
                               <td>Last Name:</td>
<td><input t:type="TextField" value="lastName"/></td>
                       </tr>
               </table>
               <input type="submit" value="Display"/>
       </form>
And the java.  You'll see that this is an input screen that isn't set
up in advance.

public class BasicInput1 {

       private String _firstName;

       private String _lastName;

       @InjectPage
       private BasicInput2 _basicInput2;

       Object onSuccess() {
               _basicInput2.onActivate(_firstName, _lastName);
               return _basicInput2;
       }

       public String getFirstName() {
               return _firstName;
       }

       public String getLastName() {
               return _lastName;
       }

       public void setFirstName(String firstName) {
               _firstName = firstName;
       }

       public void setLastName(String lastName) {
               _lastName = lastName;
       }
}

The stacktrace:


23:10:48,546 ERROR [RequestExceptionHandler] Processing of request
failed with uncaught exception:
org.apache.tapestry.runtime.ComponentEventException
org.apache.tapestry.runtime.ComponentEventException [at
classpath:jumpstart/web/pages/examples/input/BasicInput1.tml, line 7,
column 34]
       at
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl.triggerEvent(ComponentPageElementImpl.java:
973)
       at
org
.apache
.tapestry
.internal
.services
.ComponentEventRequestHandlerImpl
.handle(ComponentEventRequestHandlerImpl.java:62)
       at
org
.apache
.tapestry
.internal
.services
.ImmediateActionRenderResponseFilter
.handle(ImmediateActionRenderResponseFilter.java:42)
       at
$
ComponentEventRequestHandler_117ab99912a
.handle($ComponentEventRequestHandler_117ab99912a.java)
       at
org
.apache .tapestry.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
       at
$
ComponentEventRequestHandler_117ab99912a
.handle($ComponentEventRequestHandler_117ab99912a.java)
       at org.apache.tapestry.services.TapestryModule
$39.handle(TapestryModule.java:2071)
       at
$
ComponentEventRequestHandler_117ab99912a
.handle($ComponentEventRequestHandler_117ab99912a.java)
       at
$
ComponentEventRequestHandler_117ab99902f
.handle($ComponentEventRequestHandler_117ab99902f.java)
       at
org
.apache
.tapestry
.internal
.services
.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:133)
at $Dispatcher_117ab999030.dispatch($Dispatcher_117ab999030.java) at $Dispatcher_117ab999024.dispatch($Dispatcher_117ab999024.java)
       at org.apache.tapestry.services.TapestryModule
$13.service(TapestryModule.java:924)
       at
org
.apache
.tapestry
.internal .services.LocalizationFilter.service(LocalizationFilter.java:
43)
       at
$RequestHandler_117ab999025.service($RequestHandler_117ab999025.java)
       at org.apache.tapestry.services.TapestryModule
$3.service(TapestryModule.java:516)
       at
$RequestHandler_117ab999025.service($RequestHandler_117ab999025.java)
       at org.apache.tapestry.services.TapestryModule
$2.service(TapestryModule.java:491)
       at
$RequestHandler_117ab999025.service($RequestHandler_117ab999025.java)
       at
org
.apache
.tapestry
.internal .services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:
53)
at $RequestFilter_117ab999023.service($RequestFilter_117ab999023.java)
       at
$RequestHandler_117ab999025.service($RequestHandler_117ab999025.java)
       at
org
.apache
.tapestry
.internal.services.StaticFilesFilter.service(StaticFilesFilter.java: 79)
       at
$RequestHandler_117ab999025.service($RequestHandler_117ab999025.java)
       at org.apache.tapestry.internal.services.CheckForUpdatesFilter
$2.invoke(CheckForUpdatesFilter.java:93)
       at org.apache.tapestry.internal.services.CheckForUpdatesFilter
$2.invoke(CheckForUpdatesFilter.java:84)
       at
org
.apache
.tapestry
.ioc .internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
       at
org
.apache
.tapestry
.internal
.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java: 106)
       at
$RequestHandler_117ab999025.service($RequestHandler_117ab999025.java)
       at
$RequestHandler_117ab99901d.service($RequestHandler_117ab99901d.java)
       at org.apache.tapestry.services.TapestryModule
$12.service(TapestryModule.java:904)
       at
$
HttpServletRequestHandler_117ab99901c
.service($HttpServletRequestHandler_117ab99901c.java)
at org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
       at
org
.apache
.catalina
.core
.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
       at
org
.apache
.catalina
.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)
       at
org
.jboss
.web .tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:
96)
       at
org
.apache
.catalina
.core
.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
       at
org
.apache
.catalina
.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)
       at
org
.apache
.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
230)
       at
org
.apache
.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
175)
       at
org
.jboss
.web
.tomcat
.security
.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
       at
org
.jboss
.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java: 84)
       at
org
.apache .catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)
       at
org
.apache .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
       at
org
.jboss
.web
.tomcat
.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:
157)
       at
org
.apache
.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109)
       at
org .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
262)
       at
org .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
844)
       at org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint $Worker.run(JIoEndpoint.java:
446)
       at java.lang.Thread.run(Thread.java:613)
Caused by: org.apache.tapestry.runtime.ComponentEventException
       at
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl.triggerEvent(ComponentPageElementImpl.java:
973)
       at
org
.apache
.tapestry
.internal
.structure
.InternalComponentResourcesImpl
.triggerEvent(InternalComponentResourcesImpl.java:154)
at org.apache.tapestry.corelib.components.Form.onAction(Form.java:388)
       at
org
.apache
.tapestry.corelib.components.Form.dispatchComponentEvent(Form.java)
       at
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl .dispatchEvent(ComponentPageElementImpl.java:
840)
       at
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl.triggerEvent(ComponentPageElementImpl.java:
954)
       ... 50 more
Caused by: java.lang.NullPointerException
       at
org
.apache
.tapestry
.internal
.TapestryInternalUtils
.escapePercentAndSlash(TapestryInternalUtils.java:514)
       at
org
.apache
.tapestry
.internal
.TapestryInternalUtils.encodeContext(TapestryInternalUtils.java:504)
       at
org
.apache
.tapestry
.internal
.services .ComponentInvocationImpl.getPath(ComponentInvocationImpl.java:
101)
       at
org
.apache
.tapestry
.internal
.services
.ComponentInvocationImpl.buildURI(ComponentInvocationImpl.java:60)
       at
org .apache.tapestry.internal.services.LinkImpl.buildURI(LinkImpl.java:
105)
       at
org
.apache
.tapestry.internal.services.LinkImpl.toRedirectURI(LinkImpl.java:120)
       at
org
.apache
.tapestry
.internal.services.ResponseImpl.sendRedirect(ResponseImpl.java:69)
at $Response_117ab999079.sendRedirect($Response_117ab999079.java) at $Response_117ab999012.sendRedirect($Response_117ab999012.java)
       at
org
.apache
.tapestry
.internal
.services
.ActionRenderResponseGeneratorImpl
.generateResponse(ActionRenderResponseGeneratorImpl.java:45)
       at
$
ActionRenderResponseGenerator_117ab999014
.generateResponse($ActionRenderResponseGenerator_117ab999014.java)
       at
org
.apache
.tapestry
.internal
.services
.ComponentInstanceResultProcessor
.processResultValue(ComponentInstanceResultProcessor.java:53)
       at
org
.apache
.tapestry
.internal
.services
.ComponentInstanceResultProcessor
.processResultValue(ComponentInstanceResultProcessor.java:25)
       at
$
ComponentEventResultProcessor_117ab99912d
.processResultValue($ComponentEventResultProcessor_117ab99912d.java)
       at
$
ComponentEventResultProcessor_117ab99912e
.processResultValue($ComponentEventResultProcessor_117ab99912e.java)
       at
$
ComponentEventResultProcessor_117ab999031
.processResultValue($ComponentEventResultProcessor_117ab999031.java)
       at
org
.apache
.tapestry
.internal
.services
.ComponentResultProcessorWrapper
.handleResult(ComponentResultProcessorWrapper.java:43)
at org.apache.tapestry.internal.structure.ComponentPageElementImpl
$13.handleResult(ComponentPageElementImpl.java:936)
       at
org
.apache
.tapestry.internal.services.EventImpl.storeResult(EventImpl.java:60)
       at jumpstart.web.pages.examples.input.BasicInput1.dispatchComponentEvent
(BasicInput1.java)
       at
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl .dispatchEvent(ComponentPageElementImpl.java:
832)
       at
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl.triggerEvent(ComponentPageElementImpl.java:
954)
       ... 55 more

The exception page:

An unexpected application exception has occurred.

org.apache.tapestry.runtime.ComponentEventException
context
[Ljava.lang.String;@830a79
eventType
action
location
classpath:jumpstart/web/pages/examples/input/BasicInput1.tml, line 7,
column 34
2       <body>
3               <h1>Basic Input (1)</h1>
4
5 This page demonstrates the Form component with TextField components
and submit button handling.  It does no validation.<br/><br/>
6
7               <form t:type="form" t:id="form">
8                       <table>
9                               <tr>
10                                      <td>First Name:</td>
11 <td><input t:type="TextField" value="firstName"/></td>
12                              </tr>
org.apache.tapestry.runtime.ComponentEventException
context
[Ljava.lang.String;@830a79
eventType
success
java.lang.NullPointerException
Stack trace
org
.apache
.tapestry
.internal
.TapestryInternalUtils
.escapePercentAndSlash(TapestryInternalUtils.java:514)
org
.apache
.tapestry
.internal
.TapestryInternalUtils.encodeContext(TapestryInternalUtils.java:504)
org
.apache
.tapestry
.internal
.services .ComponentInvocationImpl.getPath(ComponentInvocationImpl.java:
101)
org
.apache
.tapestry
.internal
.services
.ComponentInvocationImpl.buildURI(ComponentInvocationImpl.java:60)
org .apache.tapestry.internal.services.LinkImpl.buildURI(LinkImpl.java:
105)
org
.apache
.tapestry.internal.services.LinkImpl.toRedirectURI(LinkImpl.java:120)
org
.apache
.tapestry
.internal.services.ResponseImpl.sendRedirect(ResponseImpl.java:69)
org
.apache
.tapestry
.internal
.services
.ActionRenderResponseGeneratorImpl
.generateResponse(ActionRenderResponseGeneratorImpl.java:45)
org
.apache
.tapestry
.internal
.services
.ComponentInstanceResultProcessor
.processResultValue(ComponentInstanceResultProcessor.java:53)
org
.apache
.tapestry
.internal
.services
.ComponentInstanceResultProcessor
.processResultValue(ComponentInstanceResultProcessor.java:25)
org
.apache
.tapestry
.internal
.services
.ComponentResultProcessorWrapper
.handleResult(ComponentResultProcessorWrapper.java:43)
org.apache.tapestry.internal.structure.ComponentPageElementImpl
$13.handleResult(ComponentPageElementImpl.java:936)
org
.apache
.tapestry.internal.services.EventImpl.storeResult(EventImpl.java:60)
jumpstart
.web
.pages
.examples.input.BasicInput1.dispatchComponentEvent(BasicInput1.java)
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl .dispatchEvent(ComponentPageElementImpl.java:
832)
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl.triggerEvent(ComponentPageElementImpl.java:
954)
org
.apache
.tapestry
.internal
.structure
.InternalComponentResourcesImpl
.triggerEvent(InternalComponentResourcesImpl.java:154)
org.apache.tapestry.corelib.components.Form.onAction(Form.java:388)
org
.apache
.tapestry.corelib.components.Form.dispatchComponentEvent(Form.java)
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl .dispatchEvent(ComponentPageElementImpl.java:
840)
org
.apache
.tapestry
.internal
.structure
.ComponentPageElementImpl.triggerEvent(ComponentPageElementImpl.java:
954)
org
.apache
.tapestry
.internal
.services
.ComponentEventRequestHandlerImpl
.handle(ComponentEventRequestHandlerImpl.java:62)
org
.apache
.tapestry
.internal
.services
.ImmediateActionRenderResponseFilter
.handle(ImmediateActionRenderResponseFilter.java:42)
org
.apache .tapestry.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
org.apache.tapestry.services.TapestryModule
$39.handle(TapestryModule.java:2071)
org
.apache
.tapestry
.internal
.services
.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:133)
org.apache.tapestry.services.TapestryModule
$13.service(TapestryModule.java:924)
org
.apache
.tapestry
.internal .services.LocalizationFilter.service(LocalizationFilter.java:
43)
org.apache.tapestry.services.TapestryModule
$3.service(TapestryModule.java:516)
org.apache.tapestry.services.TapestryModule
$2.service(TapestryModule.java:491)
org
.apache
.tapestry
.internal .services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:
53)
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:904)
org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
org
.apache
.catalina
.core
.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
org
.apache
.catalina
.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)
org
.jboss
.web .tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:
96)
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:
230)
org
.apache
.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
175)
org
.jboss
.web
.tomcat
.security
.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
org
.jboss
.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java: 84)
org
.apache .catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)
org
.apache .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
org
.jboss
.web
.tomcat
.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:
157)
org
.apache
.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109) org .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
262)
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: 446)
java.lang.Thread.run(Thread.java:613)
Request

Context Path
/jumpstart
Request Path
/examples/input/basicinput1.form
Locale
en_US
Query Parameters
t:formdata
H4sIAAAAAAAAAFvzloG1XI1BJbUiMbcgJ7VYPzOvoLRE3ymxODPZE8Q0tCpJrShJy0zNSSkuYrDKL0rXSyxITM5I1StJLEgtLimq1EvOL0rNyUzSS0osTtVzTAKKJSaXuIF0qASnlpQWOCaXZObnqYYe5n4oevwPEwOjDwNPfGpOam5qXolfYm5qCYOQT1ZiWaJ+TmJeun5wSVFmXrp1RUEJAyfcahKc6EaiEwOK8pNTi4uDS5NyM4uLgQ6FOPfwuhSTtG/zzjExMFQUlGswqBFjfbxBcSFDHQNDCQM3khjxukGaWQGx57eLkwEAAA==
textfield
textfield_0
b
Headers
accept
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
plain;q=0.8,image/png,*/*;q=0.5
accept-encoding
gzip, deflate
accept-language
en-us
connection
keep-alive
content-length
366
content-type
application/x-www-form-urlencoded
cookie
JSESSIONID=943A0DC434B21C8F518EC434709F7F2C
host
localhost:8180
referer
http://localhost:8180/jumpstart/examples/input/basicinput1
user-agent
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/ 523.10.6
(KHTML, like Gecko) Version/3.0.4 Safari/523.10.6
Session

state:Start:form:defaultTracker
[EMAIL PROTECTED]
state:examples/input/BasicInput1:form:defaultTracker
[EMAIL PROTECTED]

Cheers,

Geoff





--
Howard M. Lewis Ship

Creator Apache Tapestry and Apache HiveMind

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



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

Reply via email to