您的位置:首页 > 编程语言 > Java开发

传智播客 struts1.x 常用标签的使用

2009-10-23 23:14 351 查看
除了前面学习了两个常用bean标签外,还有一个也是次常用的<bean:message>。message标签是在国际化时候需要用到的。所以当写的项目部需要国际化的时候,这个标签几乎不会被用到。简单的说,该标签的作用就是向客户端输出国际化的本地信息字符串。
<message-resources key="myKey" parameter="com.yxb.struts.ApplicationResources"/>
<bean:message bundle="myKey" key="username"/>
<bean:message bundle="myKey" key="password"/>
使用<bean:message>如上所示,首先需要在struts-config配置文件配置消息资源,如第一行代码所示。<message-resources>元素中的key表示一类资源文件的引用名字,这个属性的作用是当国际化资源文件比较复杂的时候可以进行分类,否则所有的国际化信息将在同一个资源文件中定义。第二个参数parameter是资源文件所在的目录和基名,这里的路径和JAVA中的包一样,使用的包名的方式表示的,最后一个就是资源文件的基名。所谓基名就相当于不同语言资源文件名的统一的前缀,这个是自己通过该参数命名的。在这里配置好以后,就应该在相应的目录下放置资源文件,并且以基名开头,以语言国家代码下划线的组合的后缀结尾。比如英文可以默认是基名就可以:ApplicationResources.properties,但是其他同类资源就要按规则命名了,例如简体中文的资源名字:ApplicationResources_zh_CN.properties,其中zh表示语言简体中文,CN是国家代码。这些在浏览器的语言选项中都能查到。资源文件里的内容就是key和value值对:key=value,除了英文资源value值是直接的英文字符以外,其它语言的value值应该是/u开头的Unicode码的十六进制形式。如果没有相应的工具,可以利用native2ascii命令来转换相应的本地字符。但是IDE基本上都提供了这种国际化资源的属性文件编辑器,可以直接进行属性的编辑。上面代码的最后两行是在JSP页面中使用<bean:message>标签,其中key属性是说明应该到资源文件中找匹配key的value值作为输出。另外一种寻找方式是通过name和property属性进行匹配,其中name是bean的值,property则是bean中的属性的值,如果只有name,则该bean的值本身会被当做key使用。如果bundle属性没有指定,则struts会去找默认的资源文件束,同时也要求struts的配置文件有默认资源文件束——即有一个<message-resources>元素中没有key属性。
接下来了解的是逻辑标签,逻辑库里的标记能够用来处理外观逻辑而不需要使用JAVA脚本,struts的逻辑标签能够有条件的输出文本、循环某个对象集合并重复的输出其中的文本以及应用程序的流程控制。它也提供了一组在JSP页中处理流程控制的标记,总的来说,逻辑标记库主要有三个功能:条件逻辑、重复和转发重定向响应。首先来看一下iterate标签:
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>

<%
String[] users= {"xxx","yyy","zzz"};
request.setAttribute("users",users);
%>

<logic:iterate id="user" name="users" scope="request">
<bean:write name="user"/>  
</logic:iterate>
上面三段代码就是模拟使用一个简单的iterate标签,首先同其他标签一样,先要引入标签库的声明,然后为了模拟循环输出创建了一个String类型的数组,并存入request对象中。最后就是使用<logic:iterate>来做循环,里面嵌套一个<bean:write>标签来输出从集合中取出的变量的值。<logic:iterate>中name属性值应该是一个可以迭代的集合对象,或者由name属性和property属性组合来确定一个集合对象,这样就需要name是一个bean对象,并且其中property所对应的属性是一个集合属性。<logic:iterate>标签中id属性的作用是存放每次迭代出来的集合对象中的值的临时变量,因此可以用<bean:write>来对该变量进行输出,同时也能用EL表达式来进行输出。下面是一个双重循环的例子:
<%
ArrayList users = new ArrayList();
User user1 = new User();
user1.setUserName("xxx");
user1.setPassWord("111");
user1.setInterests(new String[] { "aaa", "bbb", "ccc" });

User user2 = new User();
user2.setUserName("yyy");
user2.setPassWord("222");
user2.setInterests(new String[] { "ddd", "eee", "fff" });

User user3 = new User();
user3.setUserName("zzz");
user3.setPassWord("333");
user3.setInterests(new String[] { "ggg", "hhh", "iii" });

users.add(user1);
users.add(user2);
users.add(user3);
request.setAttribute("users", users);
%>

<logic:iterate id="user" name="users" scope="request" indexId="i" offset="1">
${i+1 }:
<bean:write name="user" property="userName" />:
<logic:iterate id="interest" name="user" property="interests" length="2">
<bean:write name="interest" />
</logic:iterate></br>
</logic:iterate>
上面例子中用到User类添加一个String[]类型的数组interests,JAVA代码片断时创建一个存放User对象的ArrayList,然后将这个List放入到request对象中。首先的第一重循环和前面的例子一样,从一个集合对象中迭代出一个user对象变量,然后再次迭代User对象的interests集合。第一重循环输出用户的名字,第二重循环输出该用户的所有兴趣。例子中同时还测试了iterate标签的另外几个属性,比如indexId表示当前迭代的循环变量的值,offset表示从第几个迭代出来的变量开始循环,而length则表示总共迭代出几个变量,默认是全部输出出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: