Struts2 OGNL标签

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:标签用于对集合进行迭代,这里的集合包含ListSet和数组。
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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值