Is there some logical reason why the behavior of the value tag attribute
seems to be different among different tags.  Basically, what I observe
is that if I'm using altSyntax, depending on the tag, the %{} syntax is
required or optional in the value attributes.  For example, the below
tag:

 

<s:url ... >

<s:param name="name" value="%{a}" />

</s:url>

 

Is exactly the same as:

 

<s:url ... >

<s:param name="name" value="a" />

</s:url>

 

But the following two tags are not the same:

 

<s:form ...>

            <s:hidden name="name" value="%{a}" />

</s:form>

 

<s:form ...>

            <s:hidden name="name" value="a" />

</s:form>

 

I have traced this down to the difference in the two methods
Component.findValue(String) and Component.findValue(String,Class).  It
seems some tags use findValue(String) to parse the value attribute and
some use findValue(String,Class).  This, of course, make sense because
some tags expect the value attribute to evaluate to a String or an
object.  The problem is that the expression for the two methods is
handled slightly differently.

 

findValue(String) : the %{} enclosing syntax is optional, but the
following expression will fail %{a}%{b}

findValue(String,String.class): the %{} syntax is required for
evaluation and the following expression is valid %{a}%{b}

 

I realize if you are evaluating to an Object the %{a}%{b} makes no sense
at all.  The problem seams to me that some tags are evaluating to a
Object when in fact it should be a String, so the tag should use
findValue(String,String.class) as opposed to findValue(String).  I think
at this point, I've confused even myself.  Basically is comes down to
this, logically it seems that if I can do:

 

<s:form ... >

            <s:hidden name="name" value="%{a}%{b}" />

</s:form>

 

I should be able to do:

 

<s:url ... >

<s:param name="name" value="%{a}%{b}" />

</s:url>

 

Darren

Reply via email to