On Wed, 23 May 2001, Martin Cooper wrote:
> It seems that it is not possible to use the logic tags to test "is this
> property either null or an empty string?". Using <logic:present>, I can
> determine that some value is present, but as far as I can tell, there is no
> way to test for an empty string. Specifying value="" for tags such as
> notEqual seems to result in a complaint that a required attribute has not
> been specified. (Is this correct, or is this a bug in Resin, the container
> I'm using?)
>
This is ultimately due to a restriction on the way that
<jsp:setProperty name="beanname" property="*"/>
works, which I copied in the BeanUtils and PropertyUtils classes. As the
properties are being copied, if the input value is a zero length string,
it is *not* copied.
Changing this behavior now would be very likely to break existing code, so
I think we need to deal with it. But, your question is more general in
scope because the input beans could come from the application as well.
> So, I had a couple of ideas for solving this, and I'd like to hear what
> people think.
>
> 1) Modify the present and notPresent tags such that the empty string is
> equivalent to null for the purposes of this test, if in fact the specified
> property is a String. This might break things, though - I'm not sure.
>
> 2) Define two new logic tags - perhaps empty and notEmpty - which define
> emptiness as a property being either null or the empty string. Unlike
> present and notPresent, these tags would only work with the name and
> property attributes (i.e. not cookie, parameter, etc), since the others
> don't really make sense distinct from present and notPresent.
>
> The second option appeals to me more, because it seems somewhat cleaner than
> muddying the definition of presence to include type-specific values.
>
A third option would be to add an "empty" attribute to the <logic:present>
and <logic:notPresent> tags, which tells them how to treat empty
strings. The default, of course, would be the current behavior.
> Comments, anyone?
>
> --
> Martin Cooper
>
>
>
>
Craig