跳转到内容

WebObjects/Project WONDER/Frameworks/WOOgnl

来自维基教科书,开放的书籍,开放的世界

WebObjects 维基教科书页面被认为已过时

[编辑 | 编辑源代码]

转至 http://wiki.objectstyle.org/confluence/display/WO/Project+WONDER-Frameworks-WOOgnl

OGNL 代表“对象图导航语言”,它定义了整个键值编码类能力系列。正如 Jonathan Rentzsch 在其关于 Project WOnder 的 CAWUG 演示中所说,“想想:类固醇上的键值编码”。你可以在 官方 OGNL 网站 上找到更多关于 OGNL 细节的信息。

WOOgnl 提供了一个框架,它将 OGNL 语法集成到 WO 的标准绑定解析中。只需在你的构建路径中包含 WOOgnl 框架并在你的绑定值之前添加“~”,它将被 WOOgnl 解释。

如果你的 html 标记格式正确,你也可以在标准 html 标签中放置 ognl 表达式,如果你设置了以下属性

ognl.parseStandardTags=true

以下是一些例子,展示了你可以用它做的一些非常酷的事情

  • value="~\"Hello Mr.\" + session.user.firstName";
  • value="~name.length().(#this>100?2*#this:20+#this)";
  • value="~#A=new NSMutableArray(),#A.addObject(name),#A";

以下是一些由 WOOgnl 的原始作者 Max Muller 提供的例子

 // Calling methods with arguments
 Repetition1: WORepetition {
       item = arrayItem; 
       list = "~sort(anArray, \"name\")"; 
 }
 // Calling static methods
 Repetition2: WORepetition {
       item = arrayItem; 
       list = "[email protected]@sortedArraySortedWithKey(anArray, \"name\")"; 
 }
 // Accessing static ivars
 String1: WOString {
       value = "[email protected]@OgnlSpecialCharacters";
 }
 // Use of conditionals, note that every previous value of the . is
 // pushed into the ivar #this
 String2: WOString {
       value = "~name.length().(#this > 100? 2*#this : 20+#this)";
 }
 // String concat
 String3: WOString {
       value = "~\"Hello Max \" + name";
 }
 // Use of set operator in.  can also use in against NSArray and
 NSSet objects
 String4: WOString {
       value = "~name in {\"Main\", \"Something\"} ? \"Yes\" : \"No\"";
 }
 // Variable declaration.  Note that commas allow multiple actions
 // per expression.
 String5: WOString {
       value = "~#A=new com.webobjects.foundation.NSMutableArray(),#A.addObject(name), #A.addObjectsFromArray(session.languages), #A";
 }
华夏公益教科书