JavaScud | Forum | JIRA | Blog |
  Dashboard > WebWork2文档中文化计划 > ... > Tags > Tag Syntax
  WebWork2文档中文化计划 Log In View a printable version of the current page.  
  Tag Syntax
Added by scud, last edited by scud on Sep 29, 2007  (view change)
Labels: 
(None)

WebWork的标签语法非常容易理解,为了快速开始,所有你需要知道的就是所有的属性最初都是被设置为字符串的.然后它们会解析 %{ ... } 语法,任何大括号之间的内容都会基于value stack求值.

升级事项!
标签语法不总是这么简单 – 如果你从 WebWork 2.1.7 或者前面的版本升级过来的,你可能希望阅读一下 Alt Syntax.

就像生活里的其他事情,它原来并不是十分 那么 简单.明确地说,实际上有3个规范你要知道:

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

理解这些规则的最好方法就是查看一些例子.

我们承认这些规范可能令人糊涂.通常情况下,你根本不需要知道它们,在99.9%的时间里一切事情都会"正常工作".当然,就像我们在例子里看到的,会有一些棘手的情况需要理解这些规范.在WebWork将来的版本中,会努力让标签语法更简单

一些例子

最简单的例子来解释标签语法如何工作就是下面的例子.这个例子仅仅演示了规则1:

<ww:textfield label="%{getText("state.label")}" name="state"/>

在这个例子里,label被动态求值,设置为OGNL表达式 getText("state.label") 的结果,这个表达式会调用国际化装置来获取i18n主键 state.label 的值.name,是一个字符串属性,简单地被设置为 state 字符串.

下一个例子演示了规则2:

<ww:select label="%{getText("state.label")}" name="state" multiple="true"/>

这个例子看起来类似前一个例子,要注意到的主要事情是 multiple 属性是 Boolean 类型的, 这意味这它符合规则2.通常你不会注意到这个,因为 "true" 会被当作OGNL表达式求值得到true,也就是你想要的.

现在让我们假设我们要扩展这个例子来演示规则3,让multiple属性变成动态的:

<ww:select label="%{getText("state.label")}" name="state" multiple="%{allowMultiple}"/>

因为这个属性是 Boolean 类型的,并且以规则3中正确的字符开始和结束,它变成表达式 allowMultiple, 并会在value stack上进行求值,返回一个true或者false,就像前一个例子一样.

无论如何要关注有一个棘手的例子.例如,下面的多半是 不正确的:

<ww:textfield label="%{getText("state.label")}" name="state" value="CA"/>

这个例子只有在如果表达式 CA 会产生某些东西时才能工作,也就是说你的action有一个 getCA() 方法,这大概不是你所期望的.这是因为 value 属性是 Object ,因此规则2会被应用.如果期望设置一个静态的字符串作为初始值,你会需要提供一个OGNL表达式来返回一个字符串.例如,这是来完成它的 正确 方式:

<ww:textfield label="%{getText("state.label")}" name="state" value="%{'CA'}"/>

同时你也可以设置value属性仅仅为 "'CA'",我们推荐使用被解析表达式的方式,因为将来当WebWork支持解析所有类型的属性时,你的代码会继续工作.

Alt Syntax (WebWork2文档中文化计划)

我们成人这些规范可能令人糊涂.通常情况下

应该是

我们承认这些规范可能令人糊涂.通常情况下

Posted by Anonymous at Jul 11, 2007 15:21 | Reply To This

成人的世界比较空虚寂寞,通常要想些东西来玩自己!
有些人觉得这个适合玩自己,所以学习自己玩!

Posted by Anonymous at Aug 26, 2007 23:06 | Reply To This

唉,程序员都是喜欢自己人搞自己人

Posted by Anonymous at Sep 29, 2007 00:43 | Reply To This

和和,我总算糊涂了

Posted by Anonymous at Mar 07, 2008 22:27 | Reply To This

<ww:textfield label="%

Unknown macro: {getText("state.label")}
" name="state" value="CA"/>
因为 value 属性是 Object 这句什么意思????
value不是object/string吗
越搞越糊涂

Posted by Anonymous at Apr 23, 2008 14:45 | Reply To This

你们说得都挺有意思的,呵呵~~

感觉真的挺折磨人的~~

Posted by Anonymous at Jun 24, 2008 17:35 | Reply To This
Site running on a free Atlassian Confluence Open Source Project License granted to WebWork China. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.3 Build:#808 May 29, 2007) - Bug/feature request - Contact Administrators