First of all thanks a lot for the good and well structured reply. I tried <s:set name="a" value="%{'/jsp/'+#parameters.file.toString()}" />
but the result is still the same. I also wrote an own static method that prints out the result and it is also "/jsp/[Ljava.lang.String;@1bd2184". However, a static concatenation method will most probably work, but I hope it is not the only way to do it. In JIRA I only found a three year old issue asking for the concatenation via "+" in the property tag. I cannot imagine String concatenation not being supported. I am going to create a JIRA issue for that tomorrow, unless someone can tell me another way than using a static concatenation method. Best, Anton Jeromy Evans wrote: > I don't have the full solution, but lets think about this for a moment > instead of using trial-and-error... > > By default, every struts2 tag either expects the attribute to be a > string literal, an OGNL expression evaluated as a string or an OGNL > expression evaluated as an object. We don't really know which without > checking the docs or code, but as we're performing an operation we can > take the safe path state that we're using an OGNL expression. > > <s:set name="a" value="%{insert_expression}" /> > > Now that we know we're using an expression we discount all the attempts > that aren't valid OGNL and write some OGNL to concatenate a string > > <s:set name="a" value="%{'/jsp/'+#parameters.file}" /> > > ie. a string literal concatenated to the root object parameters' member > named file > > You said you tried this and got: > > "/jsp/[Ljava.lang.String;@1bd2184" > > The concatenation has worked, but it evaluated #parameters.file as an > object reference rather than a string. Now you've isolated the problem > to this sub-expression. That sucks, so now think of a way to instruct it > that we want to value to be evaluated as a string. > > Does <s:set name="a" value="%{#parameters.file}" /> work? It should, so > the problem is specific to the concatenation operation. > > Maybe we need to force evaluation of a string prior to concatenation > (haven't tried this:) > > <s:set name="a" value="%{'/jsp/'+#parameters.file.toString()}" /> > > ie. call toString() prior to concatentation. One of two things will > happen: it will work because the result is strongly-type as a string, or > it will concatenate another reference to a string object > > If that doesn't work, at this stage I'd search JIRA for a known problem > and resort to something more reliable like calling a static method > > <s:set name="a" value="[EMAIL PROTECTED]@concatenate('/jsp/', > #parameters.file)}" /> > > Hope that helps, > Jeromy Evans > > PS: s:text evaluates the name attribute as a string,whereas s:set > evaluates the value attribute as an object. This accounts for the > different behaviour. I find this inconsistency between tags is one of > the most frustrating aspects of how OGNL is used by struts2. > > Anton Pussep wrote: >> Results in the same as >> >> <s:set name="a" value="'/jsp/'#parameters.file" /> >> >> which means that a remains unset. >> >> Same for: >> >> <s:set name="a" value="/jsp/%{#parameters.file}" /> >> <s:set name="a" value="'/jsp/'%{#parameters.file}" /> >> <s:set name="a" value="%{/jsp/#parameters.file}" /> >> <s:set name="a" value="%{'/jsp/'#parameters.file}" /> >> >> Best, >> Anton >> >> Saul Qunming Yuan wrote: >> >>> Hi >>> >>> You may want to try the following to set variable "a": >>> >>> <s:set name="a"> >>> <s:text name="/jsp/%{#parameters.file}" /> >>> </s:set> >>> >>> just a thought. >>> >>> Saul >>> >>> Anton Pussep wrote: >>> >>>> Hello, >>>> >>>> I am trying to concatenate strings in tag attributes and get results >>>> that I don't understand: >>>> >>>> <s:text name="/jsp/%{#parameters.file}" /> >>>> >>>> prints out "/jsp/test.jsp", whereas >>>> >>>> <s:set name="a" value="'/jsp/' + #parameters.file" /> >>>> <s:text name="#a" /> >>>> >>>> prints out "/jsp/[Ljava.lang.String;@1bd2184", same for >>>> >>>> <s:set name="a" value="%{'/jsp/' + #parameters.file}" /> >>>> >>>> whereas the following does not work: >>>> >>>> <s:set name="a" value="'/jsp/'#parameters.file" /> >>>> >>>> What is the way to concatenate strings in the set tag and why >>>> doesn't it >>>> work the same way as it does in the text tag? >>>> >>>> Best, >>>> Anton >>>> >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>> >>>> >>>> -------------------------------- >>>> Spam/Virus scanning by CanIt Pro >>>> >>>> For more information see >>>> http://www.kgbinternet.com/SpamFilter.htm >>>> >>>> To control your spam filter, log in at >>>> http://filter.kgbinternet.com >>>> >>>> >>> --------------------------------------------------------------------- >>> 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]