You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@click.apache.org by "florin.g" <fl...@bytenotes.com> on 2008/11/09 01:38:52 UTC

Hidden fields do not post?

Unless I get something wrong, we have a showstopper.

I prefer manual layout of forms. I do start with $form at first for
practical reasons and once the functionality is working fine I switch to
manual layout.

There is one hidden field, <input type="hidden" name="serviceId"
id="webform_serviceId"/> that I cut from the $form output and place it in my
manual form. No errors. When the value is set via javascript and then
submit, I get an error. If I don't set the value, there is no error. If I
set the value manually (hard coded), it still does not work. 

Here's the error:

java.lang.NullPointerException
	at java.lang.Class.isAssignableFrom(Native Method)
	at net.sf.click.control.HiddenField.bindRequestValue(HiddenField.java:282)
	at net.sf.click.control.Field.onProcess(Field.java:873)
	at net.sf.click.control.Form.onProcess(Form.java:1746)
	at net.sf.click.ClickServlet.processPage(ClickServlet.java:546)
	at net.sf.click.ClickServlet.handleRequest(ClickServlet.java:331)
	at net.sf.click.ClickServlet.doPost(ClickServlet.java:267)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1120)
	at
net.sf.click.extras.filter.PerformanceFilter.doFilter(PerformanceFilter.java:290)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1111)
	at main.XSS$$M$7513a72f.doFilter(XSS.java:25)
	at main.XSS$$A$7513a72f.doFilter(<generated>)
	at main.XSS.doFilter(<generated>)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1111)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:219)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:786)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:431)
	at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:188)
	at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:113)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:325)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:533)
	at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:870)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:657)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:391)
	at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:235)
	at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497)

It looks like it's happening here:

} else if (Date.class.isAssignableFrom(valueClass)) { // line 286 in
HiddenField.java
                long time = Long.parseLong(aValue);
                setValueObject(new Date(time));

}

I cannot get around it. If I switch the field value from value='110' to
value='_110' thinking that it's a matter of parsing a number, I get the same
result.

I would think that it is easy to replicate in different environments.

Thanks. 


-- 
View this message in context: http://n2.nabble.com/Hidden-fields-do-not-post--tp1475339p1475339.html
Sent from the click-user mailing list archive at Nabble.com.


Re: Hidden fields do not post?

Posted by Bob Schellink <sa...@gmail.com>.
florin.g wrote:
> ValueClass?


Nods it informs HiddenField the type (class) of the value. This helps 
HiddenField convert from request String parameters to HiddenField 
values, e.g. String -> Date.


> 
> This is what I used and it failed. I wish the error would be more helpful.


Agreed, I'll add an exception if the value class is not defined.


kind regards

bob

Re: Hidden fields do not post?

Posted by "florin.g" <fl...@bytenotes.com>.
ValueClass?

This is what I used and it failed. I wish the error would be more helpful.

HiddenField serviceId = new HiddenField();
serviceId.setName("serviceId");
form.add(serviceId).setRequired(true);

My grandmother used to say that you eat a sack of salt with a man (a spouse
that is) and still don't know him. I suppose there is always something to
learn about a framework.

Your suggestion worked. Thank you for not belittling stupid questions.

I am back using my nights for hacking away. Construction is so bad I barely
have any work so now I am building a website geared toward finding
remodeling jobs and sharing referral with contractors. I will post it when
done.

Is there a reason we still cannot do method chaining yet:

new NumberField().setName("myfield").setWidth(300).setWhatever().add(new
SomeController() {});

These setters return void anyways and I don't see any backward compatibility
issues. This chaining makes coding cursive, less disruptive or verbose.

Thanks again.


sabob wrote:
> 
> Hi Florin,
> 
> Looks like the HiddenField valueClass is null.
> 
> How do you construct the hidden field on the Java side?
> 
> For example if you would like to specify a hidden field containing a 
> Long it would be like this:
> 
> HiddenField field = new HiddenField("servereId", Long.class);
> 
> or
> 
> HiddenField field = new HiddenField("servereId", 1234L);
> 
> 
> bob
> 
> 
> florin.g wrote:
>> Unless I get something wrong, we have a showstopper.
>> 
>> I prefer manual layout of forms. I do start with $form at first for
>> practical reasons and once the functionality is working fine I switch to
>> manual layout.
>> 
>> There is one hidden field, <input type="hidden" name="serviceId"
>> id="webform_serviceId"/> that I cut from the $form output and place it in
>> my
>> manual form. No errors. When the value is set via javascript and then
>> submit, I get an error. If I don't set the value, there is no error. If I
>> set the value manually (hard coded), it still does not work. 
>> 
>> Here's the error:
>> 
>> java.lang.NullPointerException
>> 	at java.lang.Class.isAssignableFrom(Native Method)
>> 	at
>> net.sf.click.control.HiddenField.bindRequestValue(HiddenField.java:282)
>> 	at net.sf.click.control.Field.onProcess(Field.java:873)
>> 	at net.sf.click.control.Form.onProcess(Form.java:1746)
>> 	at net.sf.click.ClickServlet.processPage(ClickServlet.java:546)
>> 	at net.sf.click.ClickServlet.handleRequest(ClickServlet.java:331)
>> 	at net.sf.click.ClickServlet.doPost(ClickServlet.java:267)
>> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
>> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>> 	at
>> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
>> 	at
>> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1120)
>> 	at
>> net.sf.click.extras.filter.PerformanceFilter.doFilter(PerformanceFilter.java:290)
>> 	at
>> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1111)
>> 	at main.XSS$$M$7513a72f.doFilter(XSS.java:25)
>> 	at main.XSS$$A$7513a72f.doFilter(<generated>)
>> 	at main.XSS.doFilter(<generated>)
>> 	at
>> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1111)
>> 	at
>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
>> 	at
>> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:219)
>> 	at
>> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>> 	at
>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:786)
>> 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:431)
>> 	at
>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:188)
>> 	at
>> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:113)
>> 	at
>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>> 	at org.mortbay.jetty.Server.handle(Server.java:325)
>> 	at
>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:533)
>> 	at
>> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:870)
>> 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:657)
>> 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
>> 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:391)
>> 	at
>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:235)
>> 	at
>> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497)
>> 
>> It looks like it's happening here:
>> 
>> } else if (Date.class.isAssignableFrom(valueClass)) { // line 286 in
>> HiddenField.java
>>                 long time = Long.parseLong(aValue);
>>                 setValueObject(new Date(time));
>> 
>> }
>> 
>> I cannot get around it. If I switch the field value from value='110' to
>> value='_110' thinking that it's a matter of parsing a number, I get the
>> same
>> result.
>> 
>> I would think that it is easy to replicate in different environments.
>> 
>> Thanks. 
>> 
>> 
> 
> 
> 

-- 
View this message in context: http://n2.nabble.com/Hidden-fields-do-not-post--tp1475339p1478425.html
Sent from the click-user mailing list archive at Nabble.com.


Re: Hidden fields do not post?

Posted by Bob Schellink <sa...@gmail.com>.
Hi Florin,

Looks like the HiddenField valueClass is null.

How do you construct the hidden field on the Java side?

For example if you would like to specify a hidden field containing a 
Long it would be like this:

HiddenField field = new HiddenField("servereId", Long.class);

or

HiddenField field = new HiddenField("servereId", 1234L);


bob


florin.g wrote:
> Unless I get something wrong, we have a showstopper.
> 
> I prefer manual layout of forms. I do start with $form at first for
> practical reasons and once the functionality is working fine I switch to
> manual layout.
> 
> There is one hidden field, <input type="hidden" name="serviceId"
> id="webform_serviceId"/> that I cut from the $form output and place it in my
> manual form. No errors. When the value is set via javascript and then
> submit, I get an error. If I don't set the value, there is no error. If I
> set the value manually (hard coded), it still does not work. 
> 
> Here's the error:
> 
> java.lang.NullPointerException
> 	at java.lang.Class.isAssignableFrom(Native Method)
> 	at net.sf.click.control.HiddenField.bindRequestValue(HiddenField.java:282)
> 	at net.sf.click.control.Field.onProcess(Field.java:873)
> 	at net.sf.click.control.Form.onProcess(Form.java:1746)
> 	at net.sf.click.ClickServlet.processPage(ClickServlet.java:546)
> 	at net.sf.click.ClickServlet.handleRequest(ClickServlet.java:331)
> 	at net.sf.click.ClickServlet.doPost(ClickServlet.java:267)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
> 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
> 	at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1120)
> 	at
> net.sf.click.extras.filter.PerformanceFilter.doFilter(PerformanceFilter.java:290)
> 	at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1111)
> 	at main.XSS$$M$7513a72f.doFilter(XSS.java:25)
> 	at main.XSS$$A$7513a72f.doFilter(<generated>)
> 	at main.XSS.doFilter(<generated>)
> 	at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1111)
> 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
> 	at
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:219)
> 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:786)
> 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:431)
> 	at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:188)
> 	at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:113)
> 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> 	at org.mortbay.jetty.Server.handle(Server.java:325)
> 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:533)
> 	at
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:870)
> 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:657)
> 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
> 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:391)
> 	at
> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:235)
> 	at
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497)
> 
> It looks like it's happening here:
> 
> } else if (Date.class.isAssignableFrom(valueClass)) { // line 286 in
> HiddenField.java
>                 long time = Long.parseLong(aValue);
>                 setValueObject(new Date(time));
> 
> }
> 
> I cannot get around it. If I switch the field value from value='110' to
> value='_110' thinking that it's a matter of parsing a number, I get the same
> result.
> 
> I would think that it is easy to replicate in different environments.
> 
> Thanks. 
> 
>