2012-12-24 25 views
0

我正在尝试使用struts2 url标记创建一个动态菜单栏。我从webservice获得了菜单列表,并尝试为每个菜单生成相应的URL。 我尝试这个代码IBM Portal中的Struts2动态url操作

<s:iterator value="roleMenus" id="child"> 
<s:if test="parentCode == #parent.childCode"> 
    <s:if test="childCode != #parent.childCode"> 
     <c:set var="link"><s:property value='menuLink'/></c:set> 
     <% menulink = (String)pageContext.getAttribute("link"); 
      System.out.println(menulink);%> 
     <li><a id='<s:property value="menuLink"/>' name="menulink" href="<s:url action='xxxxx'/>"><s:property value="menuName"/></a></li> 
    </s:if> 
</s:if> 

与Action属性中的scriptlet传递的值

<%=menuLink%> 

或JSTL可变

${link} 

但它抛出异常

According to TLD or attribute directive in tag file, attribute "[action]" does not accept any expressions. 

所以我猜这不能在Action属性中使用任何种类的动态表达式。

我想覆盖当s:url标记被调用时生成URL的方法,但我没有线索如何做到这一点。它在IBM Portal中生成如下这样的URL:

/wps/myportal/!ut/p/b1/jZDbToNAFEW_pR9gzhmG6-OEyMVhUGCowAsh2BiQS6yI0q-X9qkm1va87WSt7J0DBeTE1C2dWhrVIYNiqObmtZqacai6Yy70MmSpw9mTio9oOujHWkKpESnoHoX8HEBCcAU8LVWEUNZ4m2-7zFONANEMXA195qWxFVGKjF7zn6H4jfyx4AT8V3EC8MIxhNAb-x3kK2Zc3GIiZHOz-4LtMO779XUSMlTLpF3GT56ME3_J94ttvi_p24T1HEoctu1yCKRNs28tFtI2Hg6ilC2JCLO7KKxbkWA_obgj3Knvmctn7n9soC86x_JbNffZ5gdG203G/dl4/d5/L0lDU0NtbUEhL3dPb0JKaVVNcHJDSy80RzNhRFVRZy9aN19OQVVGS0FQNDBPMDhGMElSNVMzMzdRMjA4MC8lMHZpZXclMEFwcExvZw!!/ 

有没有人有任何想法?任何帮助将非常感激。

回答

1

这是生成动态url的示例示例。我希望这可以帮助你。

<s:set name="days" value="{'monday', 'tuesday', 'wednesday','thrusday','friday' }" /> 

<s:iterator var="day" value="#days"> 
    <s:url action="%{#day}" var="urlTag"></s:url> 
    <s:property value="%{urlTag}"/><br/> 
</s:iterator> 
+0

有一个错误“JSPG0123E:无法找到标签属性变量的标签属性信息”。我尝试了** id **而不是** var **,并在web服务器日志中找到另一个“无法找到操作%{#day}”。我认为它绝对不接受** action **属性中的表达。谢谢你m8。 –

+0

id属性在Struts 2.1.x中已弃用,并已被var属性取代。 http://struts.apache.org/2.3.7/docs/iterator.html –

+0

当我将struts升级到最新版本2.3.8后,你的代码似乎可以工作。但是在升级我的框架时仍然存在一些错误,我仍然无法处理。非常感谢你。 –