WebObjects/Project WONDER/Frameworks/WOOgnl
外观
转到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 标记格式正确,您也可以将 ognl 表达式放在标准 html 标记中,前提是您设置了以下属性
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"; }