Hi Nathan, On Wed, Jan 21, 2009 at 9:25 AM, Nathan Coast <nat...@codeczar.com> wrote: > Hi Dave, > > Thanks for your tip. Apologies for my newbie-ness. Like I said, I've tried > every combination I can think of - except presumably the correct one. Some > examples: > > <s:param name="#attr['reqParam'].key" > value="#attr['reqParam'].value"/> > > <s:param name="#['reqParam'].key" value="#['reqParam'].value"/> > > <s:param name="[0].key" value="[0].value"/> > > <s:param name="#[reqParam].key" value="#[reqParam].value"/> > > <s:param name="#[0].key" value="#[0].value"/> > > <s:param name="#attr.reqParam.key" > value="#attr.reqParam.value"/> > > in conjunction with below, where reqParameters is a Map of key & value pairs > I'd like to add to the URL. > > <s:url id="uri" action="%{action}" namespace="%{nameSpace}"> > <s:iterator var="reqParam" value="%{reqParameters}" > status="paramStatus"> > <s:param name="#attr['reqParam'].key" > value="#attr['reqParam'].value"/> > </s:iterator> > </s:url> > > Any hints as to the syntax I should use in the s:param tag?
The problem here is not the valid OGNL syntax. The embedded <s:param /> inside the <s:iterator /> does not reach the outer <s:url /> tag, as the Param looks out for the "next enclosing" Struts tag component, which is the iterator in this case. I worked my way around this issue by creating a new tag which duplicates the behaviour of <s:param />, but looks for a certain type of enclosing component. In this case it would be the URL component. IMO this is a common problem and worth a fix. In any case you may file a feature request implementing this in Jira[1]. If I find the time I may provide a patch for this later this week. What I don't know is whether there are more cases where "outer" struts tags need a variable number of "embedded" struts tag invocations which is based on a collection or map, by utilizing the iterator tag. If you want to do it yourself you can take a look at the class Param[2], subclass it and invoke the findAncestor method in Component[3] with URL.class rather than Component.class in your new subclass. Bye, -Ralf [1] https://issues.apache.org/struts/secure/Dashboard.jspa [2] http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Param.java?view=markup [3] http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java?view=markup > cheers, > Nathan > > > Dave Newton wrote: >> >> Nathan Coast wrote: >>> >>> Is passing a map of params to a construct a url supported by the URL tag? >>> (or some other struts2 mechanism). >>> >>> <s:url id="uri" action="%{action}" namespace="%{nameSpace}"> >>> <s:iterator value="%{parameters}" status="paramStatus"> >>> <s:param name="%{key}" value="${value}"/> >>> </s:iterator> >>> </s:url> >>> >>> ${key} ${value} return the correct values however the s:param doesn't >>> support expressions. >> >> It doesn't support JSP EL expressions, but it *does* support OGNL >> expressions. >> >> Dave >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >> For additional commands, e-mail: user-h...@struts.apache.org >> >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org