问题描述
现在有一个需求是这样的, 在数据库里面有一个menu菜单表, 需要支持多种语言。 然后把菜单的名称配置到国际化资源文件中,数据库中只配置国际化文件的key.比如有如下几个字段:menuId menuName prentId URL status100 menu.user.Manager -1 XXXX.jsp Y101 menu.modify.user -100 XXXX.jsp Y102 menu.query.user -100 XXXX.jsp Y这个菜单表,中的menuName的值,用的是国际化属性ApplicationResouce_en_US.properties 文件的中key;在action中查询出来后, 放在一个list集合中,然后通过jsp页面的struts2的 <s:iterator value='#session.menuList' var='m'> <s:text name='<"s:property value='#m.menuName'">'/> <s:text name='${m.menuName}'/> </iterator>如果直接写成这样,<s:text name='menu.user.Manager'/> 就支持.这样显然不行。 因为struts标记不能嵌套使用,也不能支持EL表达式。甚至把整个<s:text name='menu.user.Manager'>都统一设置到数据库中. 试了很多种方法,都不行.我都已经绝望了.实在不行,就在Action循环通过ResourceBound.getBound("资源文件路径",Locale.ENGLISH);然后再设置到集合中, 这种方式,效率实在是比较低. 就没有用了..请大家帮我想想办法啊。 实在没有分了啊,.我只有3分. 还是系统送的.. 问题补充:myali88 写道
解决方案
引用在action中查询出来后, 放在一个list集合中,然后通过jsp页面的struts2的<s:iterator value='#session.menuList' var='m'> <s:text name='<"s:property value='#m.menuName'">'/> <s:text name='${m.menuName}'/> </iterator>如果直接写成这样,<s:text name='menu.user.Manager'/> 就支持. 没太明白作者的意思,上面那种方式无法获取i18n文件中的值吗?我觉得你这里唯一的问题就是要获取的国际化的key是动态的,除此,我不知道是否还有其他问题。我是这么做的:<s:iterator value='keys'> <s:text name='%{name}'/></s:iterator>其中“keys”保存的是你的Menu对象的数组,然后这样获取每个key对应的属性文件里的值。
解决方案二:
<s:iterator value='list' id='l'> <s:property value="l.menuName"> </iterator> 那就直接这样子
解决方案三:
引用如果定义一个自定义标签,好像不能不能嵌套。和自定义标签没有关系,jsp的<%=>是可以嵌套在struts标签里的,思想就是通过<%=>强行输出define定义变量里的对象。
解决方案四:
在action中查询出来后, 放在一个list集合中,然后通过jsp页面的struts2的 <s:iterator value='#session.menuList' var='m'> <s:text name='<"s:property value='#m.menuName'">'/> <s:text name='${m.menuName}'/> </iterator> 将menuId menuName prentId URL status 这些菜单封装成javaBean ;list中方这些javaBean就可以了,在出action前将这个list到栈顶,然后通过迭代标签,如你的List名字就叫list<s:iterator value='list' id='l'> <s:text name='<s:property value="l.menuName">'/> </iterator> 这样一定支持。注:要将list提供一个get方法
解决方案五:
struts2 没用过,struts1原来遇到和你差不多的问题,解决办法是用jsp的<%=>输出,看对你有没有帮助比如:<bean:define id="currentPage" name="ActionForm" property='pagination.currentPage' type='java.lang.Integer' /><xxx:pageController currentPage="<%= currentPage.intValue() %>" />xxx:pageController是自定义组件
解决方案六:
我觉得这里http://struts.apache.org/2.1.8.1/docs/text.html,最后面一段应该可以帮你。还可以看看这个:http://stackoverflow.com/questions/2009443/struts-2-text-tag-with-dynamic-expression-how