首页 > 代码库 > Struts2中使用OGNL
Struts2中使用OGNL
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" /> :按request > session > application顺序访问其属性 <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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。