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