Webwork标签的三条规则:
1、所有String类型的属性值都会解析 %{...} 中间的字符;
2、所有非字符串类型的属性值都不会解析,而是直接当作一个OGNL表达式求值;
3、对于第2条规则的例外情况处理是:如果非字符串类型的属性值以 %{ 开始,并以 } 结束,则在对表达式求值之前这些字符会被截取出来。
一、通用标签
1. <ww:property value="Object" default="String" escape="true|false" />
用于获取结果属性的值,如果value未给定,将使用栈顶值。例如:
<ww:property value="user.userName" />
default:如果依据value属性无法得到具体值,则使用default设定的默认值;
escape:设定是否将输出内容进行HTML转义,例如:设为true设为true,则&转为&;
2. <ww:push value="Object" />
将对象压入值栈后直接对其进行多次操作,而不需要在每个与对象相关的表达式之前加上对象名称。例如:
<ww:push value="user" />
<ww:property value="userName" />
<ww:property value="userPsd" />
</ww:push>
3. <ww:set name="varName" value="Object" scope="" />
将值栈中的某个对象的值设置到一个scope(page, stack, application, session)中。如果值未给定,将使用栈顶值;如果scope未给定,使用“webwork”的缺省scope。使用ww:set标签,可以在JSP中创建一个自己命名的临时变量指向值栈中的某个对象,然后使用#varName的形式引用该变量。例如:
<ww:set name="s" value="#session" />
<ww:property value="#s.userName" />
<ww:property value="#s.userPsd" />
</ww:set>
name:在一个指定的作用域内被赋值的变量名;
value: 用于赋值的表达式;
scope: 可选的值为:application, session, request, page或default(即action context)
另外,ww:set还可以设置常量引用,如:
<ww:set name="user" value="%{'jim'}" />
<ww:property value="#user" />
4. <ww:date name="" nice="" format="" />
用于输出date类型属性值的特殊标签。
name:取值的ognl表达式;
nice:是否使用易读(readable notations)模式;
format:设定显示格式,例如“yyyy-MM-dd hh:mm”;
例如:
<ww:date name="person.birthday" format="dd/MM/yyyy" />
按照“dd/MM/yyyy”格式显示。
<ww:date name="person.birthday" format="%{getText('some.i18n.key')}" />
将format定义到i18n文件中的方式,这个很常用。
<ww:date name="person.birthday" nice="true" />
使用易读(readable notations)的模式。
<ww:date name="person.birthday" />
使用默认的格式输出。
其中显示的规则如下:
1、如果制定了nice="true"则优先以易读(readable notations)的模式显示;
2、如果nice="false"则按照指定的format显示;
3、如果上面两个属性都没有指定,则从默认的资源文件中寻找webwork.date.format这个i18n的key,按照它显示;
4、如果还没有找到则按照DateFormat.MEDIUM格式显示;
5、特别之处:如果从ValueStack没有找到值,则默认显示空白(而不是null);
5. <ww:url value="" action="" method="" />
用于构造一个编码的URL,例如:
<ww:url />返回当前页的相对路径,如果当前页在web根目录下则返回“/”;
<ww:url value="http://www.xxx.com" />
返回结果:http://www.xxx.com
<ww:url action="user" method="login" />
返回结果:/user!login.action
也可以通过使用ww:param加上参数,如:
<ww:url action="user" method="login">
<ww:param name="userName" value="%{'kk'}" />
<ww:param name="password" value="2008" />
</ww:url>
返回结果:/user!login.action?password=2008&userName=kk
注:在ww:param中,如果value的值存在非数字非布尔型字符,必须加上单引号,数字或布尔型不用。
6. <ww:param name="" value="" />
设置父标签的参数。仅用于其他标签内部,用于设置父标签某些属性的值,例如用于ww:url中。
二、组件化标签
1. <ww:action id="" name="actionName" executeResult="true|false" ignoreContextParams="true|false" />
执行action并根据设定返回相应的数据。
id:给Action返回的ValueStack命名,便于在页面后面的部分引用,如果不写则默认为调用的Action的名字;
name:调用的Action的name;
executeResult:true或false,是否渲染Action的View。默认为false;
ignoreContextParams:Boolean值,request参数是否在Action被调用时所包括。
用法1(包含):
<ww:action name="user" executeResult="true">
<ww:param name="userName" value="%{'kk'}" />
<ww:param name="password" value="2008" />
</ww:action>
用法2(引用):
<ww:action id="u" name="user">
<ww:param name="userName" value="%{'kk'}" />
<ww:param name="password" value="2008" />
</ww:action>
<ww:property value="#u.user.userName" />
<ww:property value="#u.user.userPsd" />
2. <ww:bean id="" name="Bean" />
创建一个JavaBean, 初始化它的属性并放入ActionContext以便后续使用.例如:
<ww:bean id="now" name="java.util.Date" />
<ww:property value="#now" />
3. <ww:include value="" />
包含另一个页面或action. 例如:
<ww:include value="/test.jsp" />
或:<ww:include value="/test.action" />
三、流程控制标签
<ww:if test="true|false" />
<ww:else />
<ww:elseif test="true|false" />
例如:
<ww:if test="1==3">
1=3
</ww:if>
<ww:elseif test="1==2">
1=2
</ww:elseif>
<ww:else>
都错了!
</ww:else>
四、迭代标签
1. <ww:iterator value="" status="" />
用法举例:
<ww:iterator value="list">
Name: <ww:property value="userName" />
Password: <ww:property value="userPsd" /><br/>
</ww:iterator>
另外,还可以通过属性status设置状态变量,用于根据状态控制输出。例如:
<ww:iterator value="list" status="s">
Name: <ww:property value="userName" />
Password: <ww:property value="userPsd" />
<ww:if test="#s.odd"><!--如果当前行是奇数行-->
^_^
</ww:if><br/>
</ww:iterator>
除了odd外,还有其他状态属性可用:
odd 是否奇数行;
even 是否偶数行;
index 当前行的序号,从0开始
count 当前行数(#status.count=#status.index+1)
first 是否第一行
last 是否最后一行
modules(int) 当前行数取模
2. <ww:generator val="" separator="" count="" />
由val属性提供的值产生一个迭代器,例如:
<ww:generator val="%{'aaa,bbb,ccc,ddd,eee'}" separator="," count="3">
<ww:iterator>
<ww:property /><br/>
</ww:iterator>
</ww:generator>
以上代码生成一个迭代器并通过iterator标签显示结果。
separator 指定分隔符;
count 指定生成的迭代器的行数;
3. <ww:append id="" />
ww:append常和Iterator标签一起使用, 功能就是将不同的迭代器组合在一起,使一个迭代器迭代完成后转移到下一个迭代器中继续迭代,注意和ww:merge的区别.用法如下:
<ww:append id="lists">
<ww:param value="%{list1}" />
<ww:param value="%{list2}" />
<ww:param value="%{list3}" />
</ww:append>
<ww:iterator value="%{#lists}">
Name: <ww:property value="userName"/>
Password: <ww:property value="userPsd"/><br/>
</ww:iterator>
4. <ww:merge id="" />
ww:merge标签的作用是合并迭代器,合并后的迭代器迭代时依次调用每一个被合并的迭代器(除非这个迭代器已经迭代完毕),注意和ww:append的区别,例如有三个list被合并,每一个有三个元素,以下就是调用顺序:
1. 第一个list的第一个元素
2. 第二个list的第一个元素
3. 第三个list的第一个元素
4. 第一个list的第二个元素
5. 第二个list的第二个元素
6. 第三个list的第二个元素
7. 第一个list的第三个元素
8. 第二个list的第三个元素
9. 第三个list的第三个元素
用法如下:
<ww:merge id="lists">
<ww:param value="%{list1}" />
<ww:param value="%{list2}" />
<ww:param value="%{list3}" />
</ww:merge>
<ww:iterator value="%{#lists}">
Name: <ww:property value="userName"/>
Password: <ww:property value="userPsd"/><br/>
</ww:iterator>
5. <ww:subset source="" count="" start="" />
取一个迭代器的子集,例如:
<ww:subset source="list" count="5" start="2">
<ww:iterator>
Name: <ww:property value="userName"/>
Password: <ww:property value="userPsd"/><br/>
</ww:iterator>
</ww:subset>
source: 源集合;
count: 指定子集的元素个数;
start: 子集在源集合中的开始索引(从0开始);
6. <ww:sort comparator="" source="" />
用传入的Comparator对List进行排序。例如:
<ww:sort comparator="myComparator" source="myList">
<ww:iterator>
<!-- do something with each sorted elements -->
<ww:property value="..." />
</ww:iterator>
</ww:sort>
五、UI标签
1. <ww:form action="" method="post|get" />
2. <ww:textfield name="" value="" label="" labelPosition="" required="" requiredposition="" />
3. <ww:password name="" value="" label="" labelPosition="" required="" requiredposition="" show="" showPassword="" />
4. <ww:hidden name="" value="" label="" labelPosition="" required="" requiredposition="" />
5. <ww:textarea rows="" cols="" name="" value="" label="" labelPosition="" required="" requiredposition="" wrap="" />
6. <ww:checkbox name="" value="" label="" labelPosition="" required="" requiredposition="" />
7. <ww:checkboxlist name="" value="" label="" labelPosition="" required="" requiredposition="" list="" listKey="" listValue="" />
8. <ww:select name="" list="#{'01':'Mon','02':'Tue','03':'Wed'}" listKey="" listValue="" label="" labelPosition=""
required="" requiredposition="" emptyOption="true|false" headerKey="" headerValue="" />
9. <ww:optgroup />
10.<ww:combobox />
本标签使用一个text类型的INPUT和一个SELECT组合在一起提供组合框(Combo Box)的功能. 可以通过使用SELECT控件将文本输入到INPUT控件中, 或直接在文本框中输入文本.
11.<ww:doubleselect />
创建两个HTML Select元素, 第二个列表显示的内容随第一个列表的选中的选项变化.
12.<ww:updownselect />
创建一个元素Select列表组件, 带有可以上下移动选项元素的按钮. 当表单提交时, 列表中的元素全部被选中并按照排列顺序(从顶至底)被提交.
13.<ww:optiontransferselect />
创建一个选项转移列表组件, 由两个select标签以及其间的用于将选项在两个select之间相互移动的按钮. 表单提交时会自动选中全部选项.
14.<ww:radio name="" value="" label="" labelPosition="" required="" requiredposition="" list="" listKey="" listValue="" />
15.<ww:file name="" label="" labelPosition="" required="" requiredposition="" />
16.<ww:datepicker />
日期选择器。
17.<ww:richtexteditor />
生成一个基于FCK编辑器(http://www.fckeditor.net)的富文本编辑器.
18.<ww:component />
创建一个自定义的控件.
19.<ww:token />
防止多次提交表单.
使用token标签能帮助解决多次提交表单的问题.此标签需要你启用TokenInterceptor 或者TokenSessionInterceptor拦截器.
ww:token标签只不过放置了一个隐藏的表单元素,它包含一个唯一的令牌.
20.<ww:submit value="" />
21.<ww:reset value="" />
22.<ww:label />
23.<ww:head />
24.<ww:actionmessage />
如果存在的话输出Action消息,它的输出布局依赖于使用的主题(theme).
25.<ww:actionerror />
如果存在的话输出Action错误消息,它的输出布局依赖于使用的主题(theme).
26.<ww:fielderror />
如果存在的话输出字段的出错信息,它的输出布局依赖于使用的主题(theme).
六、国际化标签
1. <ww:text name="" />
显示特定语言的文本。如果searchResults键对应的英文文本如下:
We searched {0} items in your database and found {1} matches.
那么可以通过以下内容进行获取内容:
<ww:text name="searchResults">
<ww:param value="totalItems"/>
<ww:param value="searchCount"/>
</ww:text>
其中,第一个param的值对应参数{0},第二个param的值对应参数{1}。
2. <ww:i18n name="" />
将某个资源包的内容压入栈中,让你可以在标签内部访问与资源包相关的i18n的资源。例如:
<ww:i18n name="org.hibernate.auction.myBundle">
<ww:text name="someKey" />
</ww:i18n>
代码将从myBundle这个资源包中查找someKey对应的文本,而不是默认的资源包。
七、其他标签
1. <ww:a href="" />
2. <ww:table modelName="" sortable="" sortColumn="" sortOrder="" />
3. <ww:div />
4. <ww:panel />
输出一个tabbedPanel的面板.
5. <ww:tabbedPanel />
tabbedpanel部件是一个AJAX组件,每个选项卡可以是本地的内容或者远程的内容(每次用户选择这个选项时刷新).
6. <ww:tabbedpane />
不推荐使用此标签,建议使用ww:tabbedPanel。
7. <ww:tree />
输出一个支持AJAX的树型组件.
8. <ww:treenode />
输出一个支持AJAX树型组件的节点.
9. <ww:debug />