Webwork标签的三条规则:
1、所有String类型的属性值都会解析 %{...} 中间的字符;
2、所有非字符串类型的属性值都不会解析,而是直接当作一个OGNL表达式求值;
3、对于第2条规则的例外情况处理是:如果非字符串类型的属性值以 %{ 开始,并以 } 结束,则在对表达式求值之前这些字符会被截取出来。

一、通用标签
1.
用于获取结果属性的值,如果value未给定,将使用栈顶值。例如:

default:如果依据value属性无法得到具体值,则使用default设定的默认值;
escape:设定是否将输出内容进行HTML转义,例如:设为true设为true,则&转为&;
2.
将对象压入值栈后直接对其进行多次操作,而不需要在每个与对象相关的表达式之前加上对象名称。例如:

 
 

3.
将值栈中的某个对象的值设置到一个scope(page, stack, application, session)中。如果值未给定,将使用栈顶值;如果scope未给定,使用“webwork”的缺省scope。使用ww:set标签,可以在JSP中创建一个自己命名的临时变量指向值栈中的某个对象,然后使用#varName的形式引用该变量。例如:

 
 

name:在一个指定的作用域内被赋值的变量名;
value: 用于赋值的表达式;
scope: 可选的值为:application, session, request, page或default(即action context)
另外,ww:set还可以设置常量引用,如:


4.
用于输出date类型属性值的特殊标签。
name:取值的ognl表达式;
nice:是否使用易读(readable notations)模式;
format:设定显示格式,例如“yyyy-MM-dd hh:mm”;
例如:

按照“dd/MM/yyyy”格式显示。

将format定义到i18n文件中的方式,这个很常用。

使用易读(readable notations)的模式。

使用默认的格式输出。
其中显示的规则如下:
1、如果制定了nice="true"则优先以易读(readable notations)的模式显示;
2、如果nice="false"则按照指定的format显示;
3、如果上面两个属性都没有指定,则从默认的资源文件中寻找webwork.date.format这个i18n的key,按照它显示;
4、如果还没有找到则按照DateFormat.MEDIUM格式显示;
5、特别之处:如果从ValueStack没有找到值,则默认显示空白(而不是null);
5.
用于构造一个编码的URL,例如:
返回当前页的相对路径,如果当前页在web根目录下则返回“/”;
http://www.xxx.com" />
返回结果:http://www.xxx.com

返回结果:/user!login.action
也可以通过使用ww:param加上参数,如:

 
 

返回结果:/user!login.action?password=2008&userName=kk
注:在ww:param中,如果value的值存在非数字非布尔型字符,必须加上单引号,数字或布尔型不用。
6.
设置父标签的参数。仅用于其他标签内部,用于设置父标签某些属性的值,例如用于ww:url中。

二、组件化标签
1.
执行action并根据设定返回相应的数据。
id:给Action返回的ValueStack命名,便于在页面后面的部分引用,如果不写则默认为调用的Action的名字;
name:调用的Action的name;
executeResult:true或false,是否渲染Action的View。默认为false;
ignoreContextParams:Boolean值,request参数是否在Action被调用时所包括。
用法1(包含):

 
 

用法2(引用):

 
 



2.
创建一个JavaBean, 初始化它的属性并放入ActionContext以便后续使用.例如:


3.
包含另一个页面或action. 例如:

或:

三、流程控制标签



例如:

1=3


1=2


都错了!

四、迭代标签
1.
用法举例:

  Name:  
  Password:


另外,还可以通过属性status设置状态变量,用于根据状态控制输出。例如:

  Name:  
  Password:
 
    ^_^
 



除了odd外,还有其他状态属性可用:
odd 是否奇数行;
even 是否偶数行;
index 当前行的序号,从0开始
count 当前行数(#status.count=#status.index+1)
first 是否第一行
last 是否最后一行
modules(int) 当前行数取模
2.
由val属性提供的值产生一个迭代器,例如:


 



以上代码生成一个迭代器并通过iterator标签显示结果。
separator 指定分隔符;
count 指定生成的迭代器的行数;
3.
ww:append常和Iterator标签一起使用, 功能就是将不同的迭代器组合在一起,使一个迭代器迭代完成后转移到下一个迭代器中继续迭代,注意和ww:merge的区别.用法如下:

 
 
 


  Name:  
  Password:


4.
ww:merge标签的作用是合并迭代器,合并后的迭代器迭代时依次调用每一个被合并的迭代器(除非这个迭代器已经迭代完毕),注意和ww:append的区别,例如有三个list被合并,每一个有三个元素,以下就是调用顺序:
1. 第一个list的第一个元素
2. 第二个list的第一个元素
3. 第三个list的第一个元素
4. 第一个list的第二个元素
5. 第二个list的第二个元素
6. 第三个list的第二个元素
7. 第一个list的第三个元素
8. 第二个list的第三个元素
9. 第三个list的第三个元素
用法如下:

 
 
 


  Name:  
  Password:


5.
取一个迭代器的子集,例如:


  Name:  
  Password:



source: 源集合;
count: 指定子集的元素个数;
start: 子集在源集合中的开始索引(从0开始);
6.
用传入的Comparator对List进行排序。例如:

 
   
   
 

五、UI标签
1.
2.
3.
4.
5.
6.
7.
8.            required="" requiredposition="" emptyOption="true|false" headerKey="" headerValue="" />
9.
10.
本标签使用一个text类型的INPUT和一个SELECT组合在一起提供组合框(Combo Box)的功能. 可以通过使用SELECT控件将文本输入到INPUT控件中, 或直接在文本框中输入文本.
11.
创建两个HTML Select元素, 第二个列表显示的内容随第一个列表的选中的选项变化.
12.
创建一个元素Select列表组件, 带有可以上下移动选项元素的按钮. 当表单提交时, 列表中的元素全部被选中并按照排列顺序(从顶至底)被提交.
13.
创建一个选项转移列表组件, 由两个select标签以及其间的用于将选项在两个select之间相互移动的按钮. 表单提交时会自动选中全部选项.
14.
15.
16.
日期选择器。
17.
生成一个基于FCK编辑器(http://www.fckeditor.net)的富文本编辑器.
18.
创建一个自定义的控件.
19.
防止多次提交表单.
使用token标签能帮助解决多次提交表单的问题.此标签需要你启用TokenInterceptor 或者TokenSessionInterceptor拦截器.
ww:token标签只不过放置了一个隐藏的表单元素,它包含一个唯一的令牌.
20.
21.
22.
23.
24.
如果存在的话输出Action消息,它的输出布局依赖于使用的主题(theme).
25.
如果存在的话输出Action错误消息,它的输出布局依赖于使用的主题(theme).
26.
如果存在的话输出字段的出错信息,它的输出布局依赖于使用的主题(theme).

六、国际化标签
1.
显示特定语言的文本。如果searchResults键对应的英文文本如下:
We searched {0} items in your database and found {1} matches.
那么可以通过以下内容进行获取内容:

 
 

其中,第一个param的值对应参数{0},第二个param的值对应参数{1}。
2.
将某个资源包的内容压入栈中,让你可以在标签内部访问与资源包相关的i18n的资源。例如:

 

代码将从myBundle这个资源包中查找someKey对应的文本,而不是默认的资源包。

七、其他标签
1.
2.
3.
4.
输出一个tabbedPanel的面板.
5.
tabbedpanel部件是一个AJAX组件,每个选项卡可以是本地的内容或者远程的内容(每次用户选择这个选项时刷新).
6.
不推荐使用此标签,建议使用ww:tabbedPanel。
7.
输出一个支持AJAX的树型组件.
8.
输出一个支持AJAX树型组件的节点.
9.