概述
1.设置jsp页面
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
测试值栈:<br>
<a href="${pageContext.request.contextPath}/ognl/ValueStackAction_test.action">test</a><br>
<br>
<br>
<br>
测试ognl表达式的用法<br>
<a href="${pageContext.request.contextPath}/ognl/OgnlAction_test.action?cid=9">test</a><br>
测试标签<br>
<a href="${pageContext.request.contextPath}/ognl/OgnlTagAction_test.action?cid=9">test</a><br>
</html>
2.配置struts_ognl.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="ognl" namespace="/ognl" extends="struts-default">
<action name="*_test" class="cn.itcast.ognl.{1}" method="test">
<result name="ValueStack">/ognl/ValueStackAction.jsp</result>
<result name="ognl">/ognl/OgnlAction.jsp?msgxx=${msg}</result>
<result name="ognltag">/ognl/OgnlTagAction.jsp</result>
</action>
</package>
</struts>
3.struts.xml引入struts_ognl.xml
4.编写Action文件
package cn.itcast.ognl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
@SuppressWarnings("serial")
public class OgnlTagAction extends ActionSupport {
public String test(){
System.out.println("OgnlAction ************ test()");
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("username", "username_request");
request.setAttribute("password", "password_request");
Map sessionMap = ServletActionContext.getContext().getSession();
sessionMap.put("username", "username_session");
sessionMap.put("password", "password_session");
ServletContext sc = ServletActionContext.getServletContext();
sc.setAttribute("username", "username_application");
sc.setAttribute("password", "password_application");
//方法一:获取ValueStack对象
ValueStack valueStack1 = (ValueStack)request.getAttribute("struts.valueStack");
System.out.println("valueStack = "+valueStack1);
/*
* 插入的内容,实际上是先放置在一个map集合中,又把这个map集合放置在对象栈里
*/
valueStack1.set("error", "error_valueStack");
valueStack1.set("msg", "msg_valueStack");
// valueStack1.getRoot().add(0, new Person());
valueStack1.getRoot().add(0,new Employee());
List<Person> list = new ArrayList<Person>();
for(int i = 0;i<10; i++){
Person person = new Person(i, "tom" + i , i+20);
list.add(person);
}
request.setAttribute("persons", list);
//方法二:获取ValueStack对象
/*ValueStack valueStack2 = ServletActionContext.getContext().getValueStack();
System.out.println("valueStack = "+valueStack2);*/
return "ognltag";
}
}
property标签
使用方式:
结果显示:
set标签
使用方式:
结果显示:
push标签
使用方式:
结果显示:
bean标签
action标签
使用方式:
值为false的显示结果:
结果为true的显示结果:
iterator标签
使用方式:
结果显示:
Iterator:标签用于对集合进行迭代,这里的集合包含List、Set和数组。
cn.itcast.ognl.Person@72df520e
cn.itcast.ognl.Person@2384500d
cn.itcast.ognl.Person@43a397b2
cn.itcast.ognl.Person@293c49cf
cn.itcast.ognl.Person@3511ca2f
cn.itcast.ognl.Person@22f0eee1
cn.itcast.ognl.Person@77d307b2
cn.itcast.ognl.Person@3f9e7493
cn.itcast.ognl.Person@3bf77f86
cn.itcast.ognl.Person@75d5552b
0~~tom0~~20
1~~tom1~~21
2~~tom2~~22
3~~tom3~~23
4~~tom4~~24
5~~tom5~~25
6~~tom6~~26
7~~tom7~~27
8~~tom8~~28
9~~tom9~~29
返回当前迭代了几个元素:1
返回当前迭代元素的索引:0
返回当前被迭代元素的索引是否是偶数:false
返回当前被迭代元素的索引是否是奇数:true
返回当前被迭代元素是否是第一个元素:true
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:2
返回当前迭代元素的索引:1
返回当前被迭代元素的索引是否是偶数:true
返回当前被迭代元素的索引是否是奇数:false
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:3
返回当前迭代元素的索引:2
返回当前被迭代元素的索引是否是偶数:false
返回当前被迭代元素的索引是否是奇数:true
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:4
返回当前迭代元素的索引:3
返回当前被迭代元素的索引是否是偶数:true
返回当前被迭代元素的索引是否是奇数:false
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:5
返回当前迭代元素的索引:4
返回当前被迭代元素的索引是否是偶数:false
返回当前被迭代元素的索引是否是奇数:true
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:6
返回当前迭代元素的索引:5
返回当前被迭代元素的索引是否是偶数:true
返回当前被迭代元素的索引是否是奇数:false
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:7
返回当前迭代元素的索引:6
返回当前被迭代元素的索引是否是偶数:false
返回当前被迭代元素的索引是否是奇数:true
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:8
返回当前迭代元素的索引:7
返回当前被迭代元素的索引是否是偶数:true
返回当前被迭代元素的索引是否是奇数:false
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:9
返回当前迭代元素的索引:8
返回当前被迭代元素的索引是否是偶数:false
返回当前被迭代元素的索引是否是奇数:true
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:false
返回当前迭代了几个元素:10
返回当前迭代元素的索引:9
返回当前被迭代元素的索引是否是偶数:true
返回当前被迭代元素的索引是否是奇数:false
返回当前被迭代元素是否是第一个元素:false
返回当前被迭代元素是否是最后一个元素:true
if/elseif/else标签
使用方式:
结果显示:
url标签
使用方式:
结果显示:
ognl操作集合
使用方式:
结果显示:
上面全部的ognl标签使用源码jsp页面
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="description" content="This is my page">
</head>
<style type="text/css">
.oddClass{
background-color: red;}
.evenClass{
background-color:blue;}
</style>
<body>
ognlTag.jsp<br>
-------------------------------------------------------------------------------------------------------<br>
property标签用于输出指定值:<br>
<s:property value="#request.username"/><br>
<s:property value="#request.username11" default="xxxxx"/><br>
<s:property value="%{'<hr>hr的使用'}" escape="false"/><br>
-------------------------------------------------------------------------------------------------------<br>
set标签用于将某个值放入指定范围:<br>
<s:set value="#request.username" var="xxx"/>
<s:property value="#xxx"/><br>
<s:set value="#session.username" var="xxx" scope="request"/>
<s:property value="#request.xxx"/><br>
<s:set value="#application.username" var="xxx" scope="page"/>
<s:property value="#attr.xxx"/><br>
-------------------------------------------------------------------------------------------------------<br>
push:将对象放入栈顶,不能放入其他范围,当标签结束,会从栈顶删除。<br>
<s:push value="#request.username">
<s:property/><br><s:debug></s:debug>
</s:push>
-------------------------------------------------------------------------------------------------------<br>
Action:通过指定命名空间和action名称,该标签允许在jsp页面直接调用Action <br>
<s:action name="OgnlAction_test" namespace="/ognl" executeResult="fasle" />
-------------------------------------------------------------------------------------------------------<br>
Iterator:标签用于对集合进行迭代,这里的集合包含List、Set和数组。<br>
<s:iterator value="#request.persons" var="person">
<s:property value="#person"/><br>
</s:iterator>
<br><br>
<s:iterator value="#request.persons" var="person">
<s:property value="#person.id"/>~~<s:property value="#person.name" />~~<s:property value="#person.age" /><br>
</s:iterator>
<br><br>
<s:iterator value="#request.persons" var="person" status="st">
返回当前迭代了几个元素:<s:property value="#st.count"/><br>
返回当前迭代元素的索引:<s:property value="#st.index"/><br>
返回当前被迭代元素的索引是否是偶数:<s:property value="#st.even"/><br>
返回当前被迭代元素的索引是否是奇数:<s:property value="#st.odd"/><br>
返回当前被迭代元素是否是第一个元素:<s:property value="#st.first"/><br>
返回当前被迭代元素是否是最后一个元素:<s:property value="#st.last"/><br>
</s:iterator>
<br><br>
<table border="1">
<s:iterator value="#request.persons" var="person" status="st">
<tr class="<s:property value="#st.even?'evenClass':'oddClass'" />">
<td><s:property value="#person.id" /></td>
<td><s:property value="#person.name" /></td>
<td><s:property value="#person.age" /></td>
</tr><br>
</s:iterator>
</table><br><br>
-------------------------------------------------------------------------------------------------------<br>
if/elseif/else 基本的流程控制.‘If’标签可单独使用也可以和‘Else If’标签和(或)一个多个‘Else’一起使用 <br>
<table border="1">
<s:iterator value="#request.persons" var="person" status="st">
<tr class="<s:property value="#st.even?'evenClass':'oddClass'" />">
<td><s:property value="#person.id" /></td>
<td><s:property value="#person.name" /></td>
<td><s:property value="#person.age" /></td>
<td><s:if test="#person.age<24">少年</s:if>
<s:elseif test="#person.age<26">中年</s:elseif>
<s:else>老年</s:else></td>
</tr><br>
</s:iterator>
</table>
-------------------------------------------------------------------------------------------------------<br>
url:该标签用于创建url,可以通过"param"标签提供request参数. <br>
<s:url action="OgnlAction_test" namespace="/ognl" var="myurl"></s:url>
<a href="<s:property value='#myurl'/>">测试test</a><br>
-------------------------------------------------------------------------------------------------------<br>
使用ognl操作list和数组. <br>
<s:iterator value="{1,2,3,4}" var="list">
<s:property value="#list"/><br>
</s:iterator>
<br><br>
<s:iterator value="{'s1','s2','s3','s4'}" var="list">
<s:property value="#list"/><br>
</s:iterator>
ognl也可直接创建集合对象. <br>
<s:iterator value="#request.persons" var="person">
<s:property value="#person.name"/><br>
</s:iterator>
使用ognl操作map <br>
<s:iterator value="#{'01':'java','02':'php','03':'.net','04':'c++'}" var="abcd">
<s:property value="#abcd.key"/>~~<s:property value="#abcd.value"/><br>
</s:iterator>
-------------------------------------------------------------------------------------------------------<br>
集合的投影(只输出部分属性) <br>
<s:iterator value="#request.persons.{name}" var="person">
<s:property value="#person"/><br>
</s:iterator>
集合的过滤<br>
<s:iterator value="#request.persons.{?#this.age>24}" var="person">
<s:property value="#person.age"/><br>
</s:iterator>
集合的投影和过滤<br>
<s:iterator value="#request.persons.{?#this.age>24}.{name}" var="person">
<s:property value="#person"/><br>
</s:iterator>
</body>
</html>
最后
以上就是单薄小甜瓜为你收集整理的Struts2 OGNL标签的全部内容,希望文章能够帮你解决Struts2 OGNL标签所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复