Struts2_ValueStack,OGNL详解(转)

原文地址:http://blog.csdn.net/wyply115/article/details/8257140

目录

一、OGNL表达式

<a name=’Xcode’>Xcode</a>

版本 平台 下载地址 大小
8.2.1 Mac

官网地址
| 4.2G |
| 8.2 | Mac |
官网地址
| 4.2G |
| 8.1 | Mac |
官网地址
| 4.1G |
| 8 | Mac |
官网地址
| 4.1G |
| 7.3 | Mac |
百度网盘
密码: npe5 | 5.2G |
| 7.2 | Mac |
百度网盘
密码: g44b | 4.73G |
| 7.1 | Mac |
百度网盘
密码: 8jj8 | 4.62G |
| 7.1beta | Mac |
百度网盘
密码: e9qn | 3.85G |
| 6.4| Mac |
百度网盘
密码: iiae | 2.8G |
| 6.3 | Mac |
百度网盘
密码: 6mhs | 2.77G |
| 6.2 | Mac |
百度网盘
密码: xun6 | 2.78G |

1.ognl是struts2中动用的一种表明式语言,可用以jsp的标签库中,以有益访问各种对象的性能。它用来把界面的参数传递到Action中(并展开类型转换),它还足以用来struts2的配备文件中。

<a name=’Simulators 模拟器下载’>Simulators 模拟器下载</a>

名称 下载地址 大小(GB)
iOS 8.4 苹果官网地址 1.37
iOS 8.3 苹果官网地址 1.36

2. Root对象。

<a name=’Developer Disk Image下载’>Developer Disk Image下载</a>

名称 下载地址 大小(MB)
10.3 (14E5239d).zip 下载地址 14.7
10.2 (14C89).zip 下载地址 13.8
10.0 (14A5339a).zip 下载地址 13.8

苹果官网的iOS Developer
Library是开发者最喜爱用的知识仓库,可是在Xcode中下载速度实在是太慢!我想用迅雷离线下载肿么办,这就需要了然它的下载地址了。

  OGNL称为对象图导航语言,所谓目的图,即以随机一个对象为根,通过OGNL可以访问与这一个目的关联的其他对象,例如:

<a name=’Documentation’>Documentation</a>

名称 下载地址 大小(MB)
iOS 9.3 下载链接 872.2
Xcode 7.3 下载链接 264
OS X 10.11.4 下载链接 932
watchOS 2.2 下载链接 364.5
tvOS 9.2 下载链接 307.7

下载后挂载了看到 iOSDocset.pkg, 运行解压之后,
找到com.apple.adc.documentation.iOS.docset,复制到~/Library/Developer/Shared/Documentation/DocSets/
中,未来更新Xcode不必重复下载此文档

iOS
开发类库总计,猛戳:
网页链接

public class User{  
    private String username;  
    private Group group;  
    //省略setter,getter方法  
}  
public class Group{  
    private String name;  
    private Organization org;  
    //省略setter,getter方法  
}  
public class Organization{  
    private String orgId;  
    //省略setter,getter方法  
}  

<a name=’AppCode’>AppCode</a>

版本 平台 下载地址 大小
April 6,2016 Mac 下载链接 243MB

以上两个类,描述了通过User对象可以导航到Group对象,进而导航到Organization对象。以User为根,通过着力的getters方法,可以访问到此根对象的别样关联对象.【对象图的领航,必须经过getters方法导航】。

<a name=’webStorm’>webStorm</a>

版本 平台 下载地址 大小
2016.1.1 Mac 下载链接

注意:    

<a name=’Java To iOS’>Java To iOS</a>

名称 下载地址
j2Objc 下载链接
RoboVM 下载链接

  *
导航的目标,就是为着得到某个对象的值或设置某个对象的值或调用某个对象的方法.

<a name=’Markdown编辑器’>Markdown编辑器</a>

对于理解Markdown的人来说,Mou是一款不错的文件编辑器(Mac平台)。相相比较同类型产品,Mou
在效能性和易用性上都有过多特点,在其大概的界面之后,不仅具备自定义样式、增量搜索、普通话字体“漂移”优化,还援助终端命令行启动、内容宣布、竖版文字布局,甚至还足以用作天职列表使用,其马克down双栏布局的实时预览和协办滚动效应越来越被过多运用借鉴和应用。

惋惜的是Mou已不复帮忙macOS
斯莱瑞(Sierra)(10.12.x)已上的系统,所以在这里推荐其他几款辅助Markdown语法的软件。

编辑器 下载地址
Mou 下载链接
MacDown 官网地址
Typora [官网]地址](https://typora.io)
MaHua 在线编辑器

  *
OGNL表明式语言的着实目标,是为着在这个无法写java代码的地点执行java代码,或者是为着更方便的执行java代码.

<a name=’Xcode插件’>Xcode插件</a>

  • FuzzyAutocompletePlugin
    – 提供了除前缀匹配之外的另外更加灵活的机动补全功效,帮助 Xcode 5+。
  • SCXcodeMiniMap
    – SCXcodeMiniMap 为 Xcode 添加了代码地图效用
  • Show in
    Github

    – 可以直接打开 Github 上如今正值编纂的行对应的 commit 页面。
  • BBUFullIssueNavigator
    – 这些插件让 Xcode 在 issue 导航栏彰显所有的 issue 内容。
  • BBUDebuggerTuckAway
    – 当您伊始编制的时候帮你隐藏调试器栏的 Xcode 插件。
  • SCXcodeSwitchExpander
    – SCXcodeSwitchExpander 是一个方可帮您举办 switch
    语句的插件,还会自行帮您插入 case 语句。
  • VVDocumenter-Xcode
    – 方便的编撰标准注释的 Xcode 插件。
  • XAlign
    – 一个 Xcode
    代码自动对齐插件,它可以应用自定义的情势来对齐任何事物。
  • Cocoapods Xcode
    Plugin

    – 依赖管理工具 CocoaPods 的 Xcode 插件。
  • KSImageNamed-Xcode
    – 提供了图片名称自动补全功效的插件。
  • ColorSense-for-Xcode
    – 可视化的水彩挑选插件。
  • Backlight-for-XCode
    – 高亮当前编制的行。
  • UIColor-Hex-Swift
    – 通过十六进制字符串创制 autorelease 颜色的有利措施。★
  • KPRunEverywhereXcodePlugin
    – 只需五次点击,就足以在多少个 iOS 设备上构建,运行 App。
  • RevealPlugin
    – 将 Reveal App 和你的序列活动合为一体的 Xcode 插件。
  • RealmPlugin
  • 生成 Realm 模型的 Xcode 插件。
  • AdjustFontSize
    – 使用 ⌘ + / ⌘ – 神速键调整字体大小。
  • Lin
    – 这些插件提供了 NSLocalizedString 的自行补全插件。
  • Rephrase
    – Xcode 用于本地化的插件.
  • XCActionBar
    – Xcode 的 Alfred。
  • QuickJump
    – Xcode 疾速代码导航。
  • CATweaker
    – 一个用于创制优质的 CAMediaTimingFunction 曲线的插件.
  • XcodeWay
    – 便捷地导航到多少个地方。
  • GitDiff
    – 将与 git 仓库中不同的代码高亮。
  • MCLog
    – 用于控制台内容筛选的插件。
  • XToDo
    – 一个彰显档次中 TODO,FIXME,??? 和 !!! 列表的对话框。
  • CopyIssue
    – 使复制 Xcode issuse 描述更简明。
  • RTImageAssets
    – 自动生成所需的方方面面 App 图标的插件。
  • BBUncrustifyPlugin-Xcode
    – 使用 ClangFormat 或 Uncrustify 格式化代码的插件。
  • Aviator
    – 那些插件将 AppCode 的 ⇧⌘T (source/test 切换) 带到 Xcode 中.
  • JumpMarks
    – 使用有序的书签为你的代码做导航。
  • XCSnippetr
    – 间接上传代码片段到 Slack 和 Gist 的 Xcode 插件。
  • Peckham
    – 使用 #import 引用项目中的任何公文,提供代码提醒。
  • MLAutoReplace
    – 急迅编码以及代码格式化插件,进步你的编码速度。
  • Chameleon
    – iOS (Obj-C & 斯威夫特(Swift))的扁平化颜色框架。★
  • AutoHighlightSymbol
    – 高亮被入选的标志对应的保有实例。
  • Reveal-In-GitHub
    – 用一个急迅键就足以跳转到 GitHub 仓库的 History, Blame, PRs,
    Issues, Notifications。
  • CleanHeaders-Xcode
    – 类似 iSort
    的头文件排序和另行消除插件,让你的头文件看起来更为平稳。
  • Luft
    – 匡助你实现轻量的 View Controller 的 Xcode 插件。

3.Context对象

<a name=’测试’>测试</a>

  • CrashMonkey
    – iOS 平台的 Monkey 测试工具。
  • appium
    – Appium 是一个开源自动化测试框架。用于测试原生或者混合 app。
  • robotframework-appiumlibrary
    – AppiumLibrary 是一个用于 RobotFramwork 的 appium 测试框架。
  • Cucumber
    – iOS BDD 框架。
  • Kif
    – 一个 iOS 的函数式测试框架。
  • Subliminal
    – 一个封建的 iOS 集成测试框架。
  • UIAutomation
    – 一个接纳脚本在一连着的设备上测试你的用户界面元素的 JavaScript 库。
  • ios-driver
    – 使用 Selenium / WebDriver 测试任何 iOS 原生,混合或者移动 web
    应用。
  • Zucchini
    – 可视化的 iOS 测试框架。
  • Remote
    – 在 Xcode 内部控制你的 Motorola 来做端到端的测试。

*
在OGNL表明式中,有可能需要拜访到五个毫不相干的靶子,那时候,我们需要给OGNL传递一个Map类型的靶子,把表达式中需要运用的对象放置Map中即可.而这么些Map对象称为Context。

<a name=’其他测试’>其他测试</a>

  • NaughtyKeyboard
    – 一个饮鸩止渴字符串的大列表,当用户输入那么些字符串使有很大的也许会造成
    bug,这是一个用以在你的 iOS 设备上测试你 app 的键盘。
  • PonyDebugger
    – 使用 Chrome 开发者工具对您的 iOS app 举办长途网络和数目调试。
  • ios-snapshot-test-case
    – 使用屏幕快照的 iOS 单元测试。

 

<a name=’Beta 测试版本宣布’>Beta 测试版本发表</a>

  • Crashlytics
    – 一个倾家荡产报告和 beta 测试服务。
  • TestFlight Beta
    Testing

    – iTunes Connect 协助的 beta 测试服务。
  • HockeyApp
    – 在 HockeyApp 你可以公布你 app 的 beta
    测试版本,收集实时的倒台报告,获取用户反映,分析测试覆盖率。

  * 要在表明式访问到context中的对象,需要采用”#目标名称”的语法规则

<a name=’部署’>部署</a>

  • fastlane
    将装有 iOS 部署工具整合到一个干活流中。
  • deliver
    配备截屏,app 元数据和 AppStore app
    更新,这一切只需要一个命令就足以搞定。
  • snapshot
    活动地创立全部言语和全体装置的屏幕截图。

 

<a name=’App Store’>App Store</a>

  *
存在context的首要原因就是在OGNL中,不援助两个root对象,而一旦需要在表明式中做客四个毫不相关的靶狗时,只可以通过一个Map来把这个目的统一传递给OGNL。 

<a name=’工具’> 工具 </a>

  • Shark
    – 用于将 .xcassets 文件夹转换成一个品种安全枚举的 Swift 脚本。★
  • R.swift
    – 在 斯威夫特(Swift)项目中,强类型的机关补全资源名称的工具,包括图片,单元格和 segue
    的工具。★
  • SwiftGen
    – 一个生成 斯维夫特(Swift)(Swift)代码工具的汇集(生成资源的枚举,storyboard,本地化字符串和
    UIColor)。★
  • Localize-Swift
    – 斯维夫特(Swift) 2.0 实现在行使中切换语言的功用,帮忙你的 APP
    实现自己的本地化和国际化。★
  • Blade
    – 为 iOS 和 OS X 应用生成 Xcode 图片目录,全局图片和其它连锁的事物。
  • Retini
    – 一个最佳简单的 Retina(2x,3x)图片转换器。
  • Provisioning
    – 一个查看器插件,用于预览 .mobileprovision 文件。
  • Strsync
    – 自动翻译并且使 .strings 文件和默认语言同步。

二、ValueStack

<a name=’版本控制工具Git’> 版本决定工具Git </a>

版本号 Windows Mac OSX Linux
Git-2.0.1 下载链接 下载链接
Git-1.9.4 下载链接 下载链接
Git-1.8.5.2 下载链接 下载链接 下载链接

Design Tools 设计工具

  1.ValueStack是一个接口,在struts2中接纳OGNL(Object-Graph Navigation
Language)表明式实际上是应用实现了ValueStack接口的类OgnlValueStack.它ValueStack的默认实现类.

<a name=’Photoshop插件’> Photoshop插件 </a>

名称 简介 下载地址
Cut&Slice 切图神器 下载链接
DevRocket 切图神器 下载链接
Cutterman 最好用的切图工具 下载链接
Ink 下载链接
Corner Editor 路径圆角编辑工具 下载链接1
下载链接2
GuideGuide 辅助线工具 下载链接
Assistor PS 下载链接
Skeuomorphism.it 下载链接
QuickGuide 下载链接
Long Shadow Generator 长投影效果生成插件 下载链接
android_resizer_toolkit 下载链接
android-ps-tools 一些方便Android UI设计的PhototShop插件 下载链接
LayerCraft 用于从图层中导出UI资源的Photoshop插件 下载链接

  2.ValueStack纵贯整个action的生命周期,每一个action实例都具备一个ValueStack对象,其中保存了当下action对象和此外相关对象.

<a name=’矢量图设计工具’> 矢量图设计工具 </a>

名称 下载地址
Sketch 3 下载链接
Gravit 下载链接
Adobe Illustrator 下载链接

  3.struts2把ValueStack对象保存在名为:struts.valueStack的request域中.即ValueStack功用域为request.当action创建的时候,ValueStack就创设了,action被销毁的时候,ValueStack就销毁了

<a name=’切图工具’> 切图工具 </a>

名称 下载地址
Slicy 下载链接

  4.ValueStack中的数据分两部分存放:root(栈结构,CompoundRoot)和context(map格局,OgnlContext) 

<a name=’图标处理工具’> 图标处理工具 </a>

名称 下载地址
Icon Slate 下载链接

(1)

<a name=’在线Icon库’> 在线Icon库 </a>

名称 下载地址
IconFont 下载链接
NounProject 下载链接

*
其中的root对象是CompoundRoot,CompoundRoot继承了ArrayList,提供了额外的办法:push(),和pop()方法,用来对root对象中所包含的数据进行存取.正是由于这两个点子,CompoundRoot变成了一个栈结构.

<a name=’取色工具’> 取色工具 </a>

名称 下载地址
ColorSnapper 下载链接

*
struts2中,一个请求在最终抵达Action的法门在此以前,Action对象自我会被压入ValueStack(实际上就是置于ValueStack
的CompoundRoot中),所以action对象是CompoundRoot中的一个元素.

<a name=’Gif图片录制工具’> Gif图片录制工具 </a>

名称 下载地址
LICEcap 下载链接
GifCam 下载链接
Android Tool 下载链接

(2)

<a name=’Design Games’> Design Games </a>

The Bezier
Game
:一个相助您操练PS里钢笔工具的小游戏。

*
其中的context对象是OgnlContext,它实现了map接口,在valuestack的默认实现类中,即OgnlValueStack类中,调用ongl中的方法:Ognl.createDefaultContext(..)给context赋值,查看源代码可知,此方法再次来到的是一个OgnlContext对象.

  5.到手ValueStack的两种艺术

(1)ValueStack valueStack =
ActionContext.getContext().getValueStack(); 

    ActionContext为Action的上下文,其中有关键的6大目的valueStack,parameters,request,session,application,attr。而ognl表明式必须接纳AcitonContext中的一个目的作为根对象(root),默认为valueStack,由此访问valueStack中的数据不加#,而虽然要运用其它5个目的作为根对象,需要加#前缀。

  (2)ValueStack valueStack =
ServletActionContext.getValueStack(ServletActionContext.getRequest());

  ServletActionContext继承了ActionContext,它与web容器耦合,能够拿到web容器的有的信息.

  (3)ValueStack valueStack = (ValueStack)
ServletActionContext.getRequest().getAttribute(“struts.valueStack”);

  因为ValueStack被置于Request域中。

  6.ValueStack内存结构图

  原博文图涉及底层实现细节,该图是本人简化后,原博文图片(http://img.my.csdn.net/uploads/201212/04/1354620065_9013.png

图片 1

  7.常用的仓储数据的措施

  (1)向Map栈中存数据,即ValueStack中的context中存储数据。

    通过request, session等向map中贮存数据:

  ServletActionContext.getRuquest().setAttribute(“username”,”xxx”) ;

  ServletActionContext.getSession().put(“pwd”,”123″);

   直接向Map栈中存放数据:

  ActionContext.getContext().put(“msg”,”hello”) ;

  (2)向目标栈中存数据,即ValueStack中的root(CompoundRoot)对象

  * 先得到root,再把数据压入到root中,这中艺术是放入到栈底

ValueStack valueStack =ActionContext.getContext().getValueStack();
 valueStack.getRoot().add(new Person());

* 先拿到root,利用add(index,Object)把一个对象压入到root中指定地方.

ValueStack valueStack =ActionContext.getContext().getValueStack();

 valueStack.getRoot().add(0,new Person());//这里0,表示压入栈顶.

* 存放一个map到对象栈中

ValueStack valueStack =ActionContext.getContext().getValueStack(); 

valueStack.set("msg","dude"); //先封装成Map,在把Map放入到对象栈中,且放入栈顶.

* 利用valueStack的push方法把一个对象间接压入栈顶

ValueStack valueStack =ActionContext.getContext().getValueStack();

valueStack.push(new Person());

8.施用OGNL表达式取ValueStack中的数据

(1)<s:property />:取栈顶的元素.
(2)<s:iterator />:取栈顶的元素.
留意:此标签的value属性值无论来自目的栈仍然Map栈,都可以不加#前缀(<s:select/>标签也适用).
因为此标签在迭代的时候,总是把当前正值迭代的元素放入到栈顶.

  

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图