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