Struts - 值栈/OGNL
-
值栈
值堆栈是一组几个对象,它按提供的顺序保留以下对象 -序号 对象和描述 1 Temporary Objects在页面执行期间创建了各种临时对象。例如,在 JSP 标记中循环的集合的当前迭代值。2 The Model Object如果您在 struts 应用程序中使用模型对象,则当前模型对象放置在值堆栈上的操作之前。3 The Action Object这将是正在执行的当前操作对象。4 Named Objects这些对象包括#application、#session、#request、#attr 和#parameters,并引用相应的servlet 范围。可以通过为 JSP、Velocity 或 Freemarker 提供的标签访问值堆栈。我们将在单独的章节中研究各种标签,用于获取和设置 struts 2.0 值堆栈。您可以在您的操作中获取 valueStack 对象,如下所示 -拥有 ValueStack 对象后,您可以使用以下方法来操作该对象 -序号 ValueStack 方法和描述 1 Object findValue(String expr)通过以默认搜索顺序对堆栈评估给定表达式来查找值。2 CompoundRoot getRoot()获取包含推入堆栈的对象的 CompoundRoot。3 Object peek()在不改变堆栈的情况下获取堆栈顶部的对象。4 Object pop()获取堆栈顶部的对象并将其从堆栈中删除。5 void push(Object o) 把这个对象放到栈顶。6 void set(String key, Object o)使用给定的键在堆栈上设置一个对象,以便它可以通过 findValue(key,...)7 void setDefaultType(Class defaultType)如果在获取值时未提供类型,则设置要转换为的默认类型。8 void setValue(String expr, Object value)尝试使用默认搜索顺序使用给定表达式在堆栈中的 bean 上设置属性。9 int size()获取堆栈中的对象数。 -
OGNL
这 Object-Graph Navigation Language(OGNL) 是一种强大的表达式语言,用于引用和操作 ValueStack 上的数据。OGNL 还有助于数据传输和类型转换。OGNL 与 JSP 表达式语言非常相似。OGNL 基于在上下文中具有根或默认对象的想法。默认或根对象的属性可以使用标记符号引用,即英镑符号。如前所述,OGNL 基于上下文,而 Struts 构建了一个 ActionContext 映射以与 OGNL 一起使用。ActionContext 映射包含以下内容 --
Application − 应用范围变量
-
Session - 会话范围变量
-
Root / value stack - 您所有的动作变量都存储在这里
-
Request - 请求范围变量
-
Parameters − 请求参数
-
Atributes − 存储在页面、请求、会话和应用范围中的属性
重要的是要了解 Action 对象在值堆栈中始终可用。因此,因此,如果您的 Action 对象具有属性“x” 和 “y” 有现成的供您使用。ActionContext 中的对象使用井号引用,但值堆栈中的对象可以直接引用。例如,如果 employee 是一个动作类的属性,那么它可以被引用如下 -代替如果您在会话中有一个名为“登录”的属性,您可以按如下方式检索它 -OGNL 还支持处理集合——即 Map、List 和 Set。例如,要显示颜色下拉列表,您可以这样做 -OGNL 表达式巧妙地将“红色”、“黄色”、“绿色”解释为颜色并基于此构建列表。当我们研究不同的标签时,OGNL 表达式将在下一章中广泛使用。因此,与其孤立地看待它们,不如让我们使用表单标签/控件标签/数据标签和 Ajax 标签部分中的一些示例来查看它。 -
-
ValueStack/OGNL 示例
创建动作
让我们考虑下面的动作类,我们在其中访问 valueStack,然后设置几个键,我们将在视图中使用 OGNL 访问这些键,即 JSP 页面。实际上,Struts 2 在执行时会将您的操作添加到 valueStack 的顶部。因此,将内容放入值堆栈的常用方法是将值的 getter/setter 添加到 Action 类,然后使用 <s:property> 标记访问这些值。但是我要向您展示 ActionContext 和 ValueStack 在 struts 中是如何工作的。创建视图
让我们创建下面的jsp文件 HelloWorld.jsp在 eclipse 项目的 WebContent 文件夹中。如果操作返回成功,将显示此视图 -我们还需要创建 index.jsp 在 WebContent 文件夹中,其内容如下 -配置文件
以下是内容 struts.xml 文件 -以下是内容 web.xml 文件 -右键单击项目名称,然后单击 Export > WAR File创建一个战争文件。然后将此 WAR 部署到 Tomcat 的 webapps 目录中。最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp. 这将产生以下屏幕现在在给定的文本框中输入任何单词,然后单击“Say Hello”按钮以执行定义的操作。现在,如果您检查生成的日志,您会在底部找到以下文本 -这将显示以下屏幕,其中将显示您将输入的任何值以及我们放在 ValueStack 上的 key1 和 key2 的值。