Honestly, I have zero interest in this kind of debate... I'm sure we all take the approach we feel is best for our clients.
Lest we forget, the question at hand is about nulls in <sql:param> and the EL expression evaluator. The difference between null and "" is likely to matter to anyone querying databases, MVC or not.
I have been looking at the spec and I found this bit in JSTL 1.0 Spec section 2.5
"2.5 Body Content
If an action accepts a body content, an empty body is always valid, unless explicitly stated otherwise.
If the body content is used to set the value of an attribute, then an empty body content sets the attribute value to an empty string."
In 10.7 <sql:param> has this bit
"Body Content
JSP. The JSP container processes the body content, then the action trims it and processes it further."
and this... "Null & Error Handling If value is null, the parameter is set to the SQL value NULL."
In 4.2 <c:out>
"Null & Error Handling
If value is null, the default value takes over. If no default value is specified, it itself defaults to an empty string."
So looking at this:
<sql:param><c:out value="${param.time}" /></sql:param>
<c:out> should be producing an empty string because ${param.time} is either empty, and if it was null <c:out> produces an empty string by default.
<sql:param> should be taking the empty string and trimming it. Which I would have thought still gives you an empty string (see 2.5 above).
I can't see where <sql:param> would get a null value from. So, to me, it doesn't look like an SQL NULL should be sent in the update.
Perhaps you should do a specific check for the empty param.time and provide the <sql:param> with null to be sure.
R
----- Original Message ----- From: "Mark Galbreath" <[EMAIL PROTECTED]>
To: "'Tag Libraries Users List'" <[EMAIL PROTECTED]>
Sent: Tuesday, August 19, 2003 2:02 PM
Subject: RE: [OT]Re: <sql:param> null weirdness
What type of application do you have in mind..."hello world?"
Mark
-----Original Message----- From: Rick Ross [mailto:[EMAIL PROTECTED] Sent: Tuesday, August 19, 2003 12:52 PM To: Tag Libraries Users List Subject: Re: [OT]Re: <sql:param> null weirdness
Well, firstly I don't beleive that every application should apply the MVC pattern/practice. But even if you did, there is no reason you couldn't apply it within JSP/JSTL itself. In JSP 2 you can create your own tags
from
JSP fragments.
R
----- Original Message ----- From: "Daniel Haynes" <[EMAIL PROTECTED]>
To: "Tag Libraries Users List" <[EMAIL PROTECTED]>
Sent: Tuesday, August 19, 2003 1:20 AM
Subject: RE: [OT]Re: <sql:param> null weirdness
They do say in the spec somewhere that the sql library in JSTL should only be used in rapid prototyping and not in production code because the
library
does break the considered MVC best practice of keeping the presentation separate from the model.
dan
-----Original Message----- From: Marco Tedone [mailto:[EMAIL PROTECTED] Sent: 17 August 2003 09:03 To: Tag Libraries Users List Subject: [OT]Re: <sql:param> null weirdness
Just a question which came into my mind by reading at this email. It has been said that JSPs allow separation of roles between the web and the business developers so that, ideally, the former should work independently by the latter. Then, because prior to Struts-el :) some java code was mungled within the JSP code, then Struts-el came out. I am wondering
whether
an <sql:update> element as the one below, would actually separate the front-end developer by the business developer. At the end, hasn't Struts been invented to exhibit an handful MVC framework for web applications?
Regards,
Marco ----- Original Message ----- From: "Rick Ross" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Sunday, August 17, 2003 7:11 AM Subject: <sql:param> null weirdness
I wonder if I am not understanding EL properly...
I have a form
<form> .... <input type="text" name="time" /> <input type="submit" name="submit" /> </form>
and then a nice sql update to catch the form
<sql:update> INSERT INTO myTable VALUES ( ? ) <sql:param value="${param.time}" /> </sql:update>
The problem comes when the form parameter is empty. Since the actual database field is a mySQL TIME field, there is a very big difference
between
an empty string and a null. Empty strings will be converted into
'00:00:00'
in the database but nulls will just stay null (nulls are allowed and no defaults are specified).
The sql:param tag will never return a null if there is a "time" key in the params. Since the form always posts the parameter, I'll always have '&time=&somethingelse=' in my request. <sql:param> sees this as an empty string "", which becomes '00:00:00' in my database.
This however, works: <sql:param><c:out value="${param.time}" /></sql:param>
I am assuming that this is an intentional thing, but I'm not sure and I'd like to know why.
Anyone?
Thanks,
R
--------------------------------------------------------------------- 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]
--------------------------------------------------------------------- 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]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- Jason Lea
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
