链接:Struts标签库

OGNL(Object Graphic Navigatino Language)

OGNL称为对象图导航语言。以一个对象为根(起点),通过OGNL可以访问与这个对象关联的其它对象,正所谓“对象导航,顺藤摸瓜”

使用OGNL的jsp需要引入标签库:<%@taglib prefix="s" uri="/struts-tags"%>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="p1" namespace="/" extends="struts-default">
<action name="m1Action" class="org.ah.s2.C1" method="m1">
<result name="success" type="dispatcher">
/inputMsg.jsp
</result>
</action>
</package>
</struts>

模型层:来个两级模型

Model.java

package org.ah.s2;

public class Model {
private String uname;
private M2 m2; public Model(String uname, M2 m2) {
this.uname = uname;
this.m2 = m2;
} public M2 getM2() {
return m2;
} public void setM2(M2 m2) {
this.m2 = m2;
} public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
}
}

M2.java

package org.ah.s2;

public class M2 {
public M2(String name2) {
this.name2 = name2;
} private String name2; public String getName2() {
return name2;
} public void setName2(String name2) {
this.name2 = name2;
}
}

Action:C1.java

package org.ah.s2;

import java.util.ArrayList;
import java.util.List; import org.apache.struts2.ServletActionContext; import ognl.Ognl;
import ognl.OgnlException; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack; public class C1 extends ActionSupport {
private Model m;
private List<Model> lstM; // ------------------------------------------------------------------
public Model getM() {
return m;
} public void setM(Model m) {
this.m = m;
} public List<Model> getLstM() {
return lstM;
} public void setLstM(List<Model> lstM) {
this.lstM = lstM;
} // ------------------------------------------------------------------
public String m1() {
ActionContext ac = ActionContext.getContext();
// 放入值栈外围
ac.put("msg", "out_value"); // 放入值栈
ValueStack valueStack = ac.getValueStack();
valueStack.set("msg", "vStack_value");// OK // 放入Application
ac.getApplication().put("msg", "hello application");
// 放入session
ac.getSession().put("msg", "hello session"); // 放入request(上面的ActionContext ac搞不定,需要ServletActionContext)
ServletActionContext.getRequest().setAttribute("msg", "hello request"); // 放置对象
m = new Model("吕布", new M2("方天画戟")); // 放置List
Model m1 = new Model("关羽", new M2("青龙偃月刀"));
Model m2 = new Model("张飞", new M2("丈八蛇矛枪"));
Model m3 = new Model("赵云", new M2("龙胆亮银枪"));
lstM = new ArrayList<Model>();
lstM.add(m1);
lstM.add(m2);
lstM.add(m3);
return "success";
} }

index.jsp核心代码

    <s:form action="m1Action" method="post">
<s:textfield name="msg" value="my input"></s:textfield>
<s:submit value="测试Struts控件传值"></s:submit>
</s:form>

回显页inputMsg.jsp核心代码

    1.值栈中的值:
<s:property value="msg" />
<hr>
2.值栈外围值:
<s:property value="#msg" />
<br> 3.
<s:property value="#parameters.msg" />取表单提交值
<br> 4.
<s:property value="#application.msg" />
<br> 5.
<s:property value="#session.msg" />
<br> 6.
<s:property value="#request.msg" />
<br> 7.
<s:property value="#attr.msg" /> 按page > request > session > application顺序访问其属性,取page的值只能用这个<br> 8.取对象
<s:property value="m.uname" />
<s:property value="m.m2.name2" />
<br> 9.取List
<!-- 用listValue指定显示的内容 -->
下拉列表:
<s:select list="lstM" listValue="uname" headerValue="缺省值">
</s:select>
<br> 下拉列表(自定义List):
<s:select list="#{'0':'男','1':'女'}" label="性别" headerValue="请选择性别" />
<br>
<br> 循环遍历:
<br>
<s:iterator value="lstM" var="per" status="sta">
<s:property value="#per.uname" />
<s:property value="#per.m2.name2" />
<br>
循环的次数为:<s:property value="#sta.count" />
<br>
循环的索引为:<s:property value="#sta.index" />
<br>
是否为奇数:<s:property value="#sta.odd" />
<s:if test="#sta.count==1">No.1</s:if>
<s:elseif test="#sta.count==2">No.2</s:elseif>
<s:else>No.3</s:else>

<br /> </s:iterator>
<br>
遍历set集合:(自定义的字符串不能是字符!至少加一个空格)
<br>
<s:set name="set" value="{'E ','ddddd','ccccc','bbbbb','aaaaa'}"></s:set>
<s:iterator value="#set" var="o">
<!-- ${o }<br/> -->
<s:property value="o" />
<br />
</s:iterator> <s:debug></s:debug>

直接点击提交,查看运行结果:

Struts2中使用OGNL的更多相关文章

  1. 浅析Struts2中的OGNL和ValueStack

    要了解Struts2与OGNL表达式的关系,我们必须先搞清楚以下三个概念: 1.  ActionContext它是Action运行的上下文环境,Action的多项设置都存放在次,我们每一次Action ...

  2. [转]STRUTS2中的OGNL

    OGNL表达式是(Object-Graph Navigation Language)是对象图形化导航语言.OGNL是一个开源的项目,struts2中默认使用OGNL表达式语言来显示数据.与serlve ...

  3. struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象

    struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象.临时对象.固定名称的对象.Action对象 解答:struts2的值栈排列顺序为:1).临时对象:2).模型对象:3).Ac ...

  4. Struts2中的OGNL表达式

    一.OGNL表达式简介 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目.所谓对象图,即以任意一个对象为根,通过OGNL可以访问 ...

  5. struts2中的OGNL详解

    先了解一下OGNL的概念 OGNL的全名称Object Graph Navigation Language.全称为对象图导航语言,是一种表达式语言.使用这种表达式语言,你可以通过某种表达式语法,存取J ...

  6. Struts2中的OGNL详解 《转》

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  7. (补充)9.Struts2中的OGNL表达式

    OGNL表达式概述 1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写 * 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关 ...

  8. Struts2中的Ognl

    OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整 ...

  9. struts2中使用ognl表达式时各种符号的使用规则$,#,%

    OGNL表达式struts2标签“%,#,$” 一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一 ...

随机推荐

  1. Surprise团队项目总结

    Surprise团队项目总结 项目实现情况 实现人人模式:2个用户在同一台电脑上进行切磋下棋,即实现五子棋游戏的基本功能 实现人机模式:初级模式已经实现,可以进行人机交互,但是还没达到智能判断下棋点 ...

  2. 第五章——搭建S3C6410开发板的测试环境

    搭建S3C6410开发板的测试环境 通过本章的学习学会了如何在开发板上安装Android.开发板是学习和开发嵌入式技术的主要硬件设备,想要顺利的通过linux驱动访问硬件,是不能在PC板上模拟的,需要 ...

  3. const成员变量初始化总结

    const可以用来声明常量也就是说他的值不能被修改: const成员必须在定义的时候同时初始化,不能进行赋值 如 const int a:a的值不能修改,不能给它赋值,如何才能让它一开始就拥有一个值? ...

  4. 编译c

    1.打开vs工具 2.弄到相同路径(同所编译文件) 3.cl(微软编译器) 生成 obj exe文件 4.system是一个通用指令 可以在windows linux mac用

  5. 【转载】ANSYS 动力分析 (9) - 瞬态动力分析 (1)

    原文地址:http://htbbzzg.blog.163.com/blog/static/69725206201081663611208/ 第四章   瞬态动力分析 第一节:瞬态动力分析的定义和目的  ...

  6. Maximum Depth of Binary Tree

    二叉树最大深度的递归实现. /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo ...

  7. 查看哪些表的哪些列含有指定字符串(如‘andy’存在哪些表的哪些列中)

    -- 查看表中列含有指定字符.SQL> select * from demo1;NAME                                   ID---------------- ...

  8. js调用页面打印

    ----------------------调用页面打印-------------------------------- <body> <div id="divPrint& ...

  9. Tcp方式采集CNC兄弟设备数据

    先说下为了采集CNC兄弟设备的数据可谓是一波三折. 因为首次接触brother设备(CNC)是直接在设备上设置IP.用户名.密码,然后直连PC,用Ftp可以查看和下载CNC brother设备里的数据 ...

  10. [转]libevent简介和使用

    libevent是一个基于事件触发的网络库,memcached底层也是使用libevent库. 总体来说,libevent有下面一些特点和优势:* 事件驱动,高性能:* 轻量级,专注于网络: * 跨平 ...