zoukankan      html  css  js  c++  java
  • struts2 OGNL配和通用标签和其它标签的使用

    三、OGNL配合通用标签的其他使用

          1、iterator标签(很重要)

                                 动作类

     1 package com.itheima.web.action;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import com.itheima.domain.Student;
     7 import com.opensymphony.xwork2.ActionSupport;
     8 /**
     9  * s:iterator标签的使用
    10  * @author zhy
    11  *
    12  */
    13 public class Demo4Action extends ActionSupport {
    14     //Action动作类的引用,默认情况下就在ValueStack的栈顶
    15     private List<Student> students;
    16 
    17     public String findAll(){
    18         //调用service层的方法,List findAllStudent()
    19         students = new ArrayList<Student>();
    20         students.add(new Student("吖吖",23));
    21         students.add(new Student("北半球",24));
    22         students.add(new Student(萨芬",21));        
    23         return SUCCESS;
    24     }
    25 
    26     public List<Student> getStudents() {
    27         return students;
    28     }
    29 
    30     public void setStudents(List<Student> students) {
    31         this.students = students;
    32     }
    33     
    34     
    35 }
    DemoAction4.java
     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ taglib uri="/struts-tags" prefix="s" %>
     3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     4 <html>
     5   <head>
     6     <title>s:iterator的使用</title>
     7   </head>
     8   <body>
     9       <table width="500px" border="1" align="center">
    10           <tr>
    11               <th>序号</th>
    12               <th>姓名</th>
    13               <th>年龄</th>
    14           </tr>
    15           <%--s:iterator:struts2的迭代标签
    16               属性详解:
    17               begin,end,step和jstl的forEach标签是一样的 
    18               value属性:要遍历的集合,是OGNL表达式。
    19               var属性:取值就是一个字符串
    20                   如果写了该属性:把var的值作为key,把当前遍历的元素作为value。存到ActionContext这个大Map中
    21                   如果不写该属性:把当前遍历的元素压入栈顶
    22               status属性:遍历时的一些计数信息。
    23                   int getIndex() 从0开始
    24                   int getCount() 从1开始
    25                   boolean isFirst() 
    26                   boolean isLast()
    27                   boolean isOdd()
    28                   boolean isEven()
    29               --%>
    30           <s:iterator value="students" var="s" status="vs" >
    31               <tr>
    32                   <td><s:property value="#vs.index"/></td>
    33                   <td><s:property value="#s.name" /></td>
    34                   <td><s:property value="#s.age" /></td>
    35               </tr>
    36           </s:iterator>
    37       </table>
    38       <hr/>
    39           <table width="500px" border="1" align="center">
    40           <tr>
    41               <th>序号</th>
    42               <th>姓名</th>
    43               <th>年龄</th>
    44           </tr>
    45           <s:iterator value="students" status="vs">
    46               <tr>
    47                   <td><s:property value="#vs.count"/></td>
    48                   <td><s:property value="name" /></td>
    49                   <td><s:property value="age" /></td>
    50               </tr>
    51           </s:iterator>
    52       </table>
    jsp

                      

          2、OGNL投影(了解)

                2.1、使用过滤条件投影

     1     <%--OGNL的投影:(以下内容全是了解)添加过滤条件 
     2           a.“?#”:过滤所有符合条件的集合,如:users.{?#this.age > 19}   
     3           b.“^#”:过滤第一个符合条件的元素,如:users.{^#this.age > 19}    
     4           c.“$#”:过滤最后一个符合条件的元素,如:users.{$#this.age > 19}
     5       --%>
     6       <hr/>
     7           <table width="500px" border="1" align="center">
     8           <tr>
     9               <th>序号</th>
    10               <th>姓名</th>
    11               <th>年龄</th>
    12           </tr>
    13           <s:iterator value="students.{?#this.age>21}" status="vs">
    14               <tr>
    15                   <td><s:property value="#vs.count"/></td>
    16                   <td><s:property value="name" /></td>
    17                   <td><s:property value="age" /></td>
    18               </tr>
    19           </s:iterator>
    20       </table>
    jsp

               2.2、投影指定属性

     1 <%--OGNL的投影:指定输出内容 
     2           students.{name}========{"name1","name2","name3"}
     3       --%>
     4       <hr/>
     5           <table width="500px" border="1" align="center">
     6           <tr>
     7               <th>序号</th>
     8               <th>姓名</th>
     9               <th>年龄</th>
    10           </tr>
    11           <s:iterator value="students.{name}" status="vs" >
    12               <tr>
    13                   <td><s:property value="#vs.count"/></td>
    14                   <td><s:property /></td>
    15                   <td><s:property /></td>
    16               </tr>
    17           </s:iterator>
    18       </table>
    jsp

          3、Struts2中#,$,%符号的使用(重要)

                3.1、#

                         a、取contextMap中key时使用,例如<s:property value="#name" />

                         b、OGNL中创建Map对象时使用,例如:<s:radio list="#{'male':'男','female':'女'}" />

               3.2、$

                                a、在JSP中使用EL表达式时使用,例如${name}

                         b、在xml配置文件中,编写OGNL表达式时使用,例如文件下载时,文件名编码。

                                struts.xml——>${@java.net.URLEncoder.encode(filename)}

               3.3、%

                                在struts2中,有些标签的value属性取值就是一个OGNL表达式,例如<s:property value="OGNL Expression" />

                         还有一部分标签,value属性的取值就是普通字 符串,例如<s:textfield value="username"/>,如果想把一个普通的字符串强制看成时OGNL,就需要使用%{}把字符串套起来。

                         例如<s:textfield value="%{username}"/>。当然在<s:property value="%{OGNL Expression}" />也可以使用,但不会这么用。

          4、其他标签

               4.1、set标签

    1     <br/>-------s:set------------<br/>
    2       <%--s:set标签 
    3           value属性:取值是一个OGNL表达式
    4           var属性:是一个普通的字符串
    5           它是把value属性的值作为value,把var属性的值作为key,把存到ActionContext大map中。
    6       --%>
    7       <s:set value="'test'" var="str1"/>
    View Code

               4.2、action标签

    1 <br/>-------s:action------------<br/>
    2       <%--s:action标签 :
    3           name属性是指定一个action动作名称。它并不会真的去执行。
    4           executeResult属性指定的是:是否执行action。取值是true/false。默认值:false
    5       --%>
    6       <s:action name="action1" executeResult="true"/>
    View Code

      

               4.3、if标签,elseif标签 else标签

    1 <br/>-------s:if s:ifelse s:else------------<br/>
    2       <%-- 条件判断的标签--%>
    3       <s:set value="'S'" var="grade"/>
    4       <s:if test="#grade=='D'"></s:if>
    5       <s:elseif test="#grade=='C'"></s:elseif>
    6       <s:else>其他,看着办吧</s:else>
    View Code

               4.4、url和a标签(很有用)

                               

     1     <br/>-------s:url------------<br/>
     2       <%--s:url标签:
     3           value属性:是把值直接输出到页面上
     4           action属性:是把动作的请求地址输出到页面上 ${pageContext.request.contextPath}/action1
     5           var属性:把action的取值作为value,把var的取值作为key,放到ActionContext中
     6           注意:它会自动根据struts配置,来转换后缀名。
     7       --%>
     8       <s:url value="action1"/>
     9       <s:url action="action1" var="url" >
    10           <%--把name作为key,把value作为值,绑定到请求连接地址后面。相当于get方式拼接请求参数 
    11               注意:
    12                   name的取值就是一个普通的字符串
    13                   value的取值是一个OGNL表达式,要想转成字符串请使用''
    14           --%>
    15           <s:param name="name" value="'张三'"></s:param>
    16       </s:url>
    17       <br/>
    18       <a href="${pageContext.request.contextPath}/action1">来吧 page context</a><br/>
    View Code

    <s:a   action="action1"  >

      <s:param   name="username"  value="'yiaiy'" />   go to page

    </s:a>

  • 相关阅读:
    修改VS中的附加依赖项的继承值
    cocos2dx的addChild接口设计
    svn cleanup失败解决方法
    vi显示中文乱码
    CentOS 7.4 shell 不显示当前用户和路径的问题
    生产工具的差距导致的生产力(生产效率)的差距
    GPU的历史:从固定管线到可编程管线再到通用计算平台
    聊Java中的任务调度的实现方法及比较
    Spring Boot 揭秘与实战之RabbitMQ
    一个让Java事半功倍的反射库
  • 原文地址:https://www.cnblogs.com/soficircle/p/7062338.html
Copyright © 2011-2022 走看看