zoukankan      html  css  js  c++  java
  • (九)Struts标签基础(二)

     2.3  非表单标签

      2.3.1 <s:actionerror>标签,

     

          this.addActionError("错误信息1");   //使用addActionError方法前提是继承Actionsupport类

          this.addActionError("错误信息2");

          显示消息的标签是:<s:actionerror />显示全部的 Action级别的错误消息,可以加CSS

       2.3.2 <s:actionmessage>标签

         addActionMessage("相关信息") //使用addActionError方法前提是继承Actionsupport类

         this.addActionMessage("信息1");

         this.addActionMessage("信息2");

         显示消息的标签是:<s:actionmessage/>可以显示全部的消息

       2.3.3 <s:fielderror>标签

         addFieldError("字段名","错误信息");  //给一个字段(属性)添加错误消息

          this.addFieldError("pwd1", "错误信息1");

          this.addFieldError("pwd2", "错误信息2");

          显示消息的方法1:标签是:<s:fielderror />  //显示全部的错误消息;

          显示消息的方法2:

        <s:fielderror fieldName="pwd1"></s:fielderror>

          显示消息的方法3:如果什么都不写,则默认显示在相应字段上方


      2.4  数据显示标签

        2.4.1 action标签:在页面中执行一个Action,不需要通过超链接到Action的方式执行。

    表示找到命名空间为"/tag"中action名为"themeAction"的Action类并执行这个类的execute方法。

    其中属性executeResult="true" 意思是包含action执行完成之后返回的result页面。

       2.4.2  bean标签:在页面上实例化一个javaBean

     

    • var="dogBean" 表示这个对象的引用值为dogBean,name属性值填DogBean的完整包名,bean标签实例化的数据放在非狭义值栈当中,用#来获取。

       2.4.3  param标签:设置属性(一般与<s:bean>标签一起用,可以设置bean标签实例化后的对象的属性值。

    结果:

    dog_name赋值不成功

    • 注意value="旺财" 中的中文(字符串也一样比如value="wangcai")被当作广义值栈中的属性来看待,这时候OGNL表达式会到值栈中找有没有变量名为"旺财"的属性,然后把这个属性值赋给dog_name,明显值栈中并没有这个属性,所以dog_name赋值失败。解决方法:value="‘旺财’"(value="'wangcai'") 加单引号即可。  value=“100” 中的100为int型不会被当成属性对待。

     

       2.4.4 date标签:格式化日期类型的数据

    • 在action中往值栈中设置属性值
        @Override
        public String execute() throws Exception {
        ActionContext actionContext=ActionContext.getContext();
        actionContext.put("date", new Date());
            
            return "datashow";
        }
    • 显示日期数据的页面
    <body>
        <s:date name="#date" format="yyyy/MM/dd"/>
    </body>

    结果:

       2.4.5  include标签: 在页面中包含另一个页面。(动态包含)

    • 动态包含只是包含另一个页面最终显示出来的结果,可以定义重复变量。
    • 静态包含另一个页面的代码,不能定义重复变量。
    • 对被请求页面传值,

      在被请求页面中获取值。  传中文会乱码,最好不要传中文。

        2.4.6  property标签,用来输出(常用就不演示了)

        2.4.7  push标签:在一个页面临时性的把一个对象放到valueStack中。

    •  <s:debug>要放在<s:bean>标签内才能在用<s:debug>中看到临时添加的对象。

        2.4.7  set便签:定义变量(定义9种类型的基本变量,定义复杂类型的变量由bean标签来定义)


      2.5  控制标签

    • if/else判断标签

    • 循环标签

        第一种使用方法:<s:iterator begin="1" end="5" step="1" var="i">
                    <s:property value="#i"/>
                </s:iterator>
                <br/>
            第二种使用方法:<s:iterator begin="1" end="5" step="1">
                    <s:property />
                </s:iterator>

    结果:

      如上代码,第一种和第二种的区别在于有没有设置var,无论设置了var与否,都会把每次循环的结果放到狭义值栈中去,如果设置了var,那么在把值放到值栈中去的时候,也会把对象放到非狭义值栈中,并且名称为var指定的名称这里是i。

    •  循环集合和Map
      •   在action中对定义集合并且设置初始值。

    DataShowAction.java

    package tag;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.util.ValueStack;
    
    import actionUtil.BaseAction;
    import bean.UserBean;
    
    public class DateShowAction extends BaseAction{
    
        List<UserBean> userList;
        Map<String,Object>  userMap;
    
        public List<UserBean> getUserList() {
            return userList;
        }
        public void setUserList(List<UserBean> userList) {
            this.userList = userList;
        }
        public Map<String, Object> getUserMap() {
            return userMap;
        }
        public void setUserMap(Map<String, Object> userMap) {
            this.userMap = userMap;
        }
    
        @Override
        public String execute() throws Exception {
            UserBean user=null;
            this.userList=new ArrayList<UserBean>();
            for(int i=0;i<4;i++){
                user=new UserBean(i+"","姓名"+i,"性别"+i);
                userList.add(user);
                
            }
    
            this.userMap=new LinkedHashMap<String, Object>();
            
            userMap.put("001", new UserBean("001","张三","男"));
            userMap.put("002", new UserBean("002","李四","女"));
        
            return "datashow";
        }
    
    }

    在jsp页面上输出值

    <body>  
        <s:debug></s:debug>
            遍历List:<s:iterator value="userList" var="user">
                <s:property value="#user.getUserName()"/>
            </s:iterator>    <br/>

    遍历Map:<s:iterator value="userMap" var="user"> key=<s:property value="#user.Key"/> value=<s:property value="#user.Value"/><br/> </s:iterator> </body>

      注意:<s:iterator value="userMap" var="user"> 对狭义值栈中的userMap对象循环,每次循环的对象放到非狭义值栈中且对象名为user。

    <s:property value="#user.Key"/>取出非狭义值栈中的对象为user的key值,

    value=<s:property value="#user.Value"/>取出非狭义值栈中的对象为user的value值。

    结果:


      •   循环的状态
        <s:iterator begin="1" end="10" step="1" status="statue">
            下标=<s:property value="#statue.index"/> 是否第一条: <s:property value="#statue.first"/>
            是否最后一条:<s:property value="#statue.last"/> 是否奇偶行:<s:property value="#statue.odd"/><br/>
        </s:iterator>

        注意: status状态值也是存放在非狭义值栈当中。

    结果:

      •    表格的奇偶行变色
        <table border="1" width="100%">
        
        <s:iterator begin="1" end="10" step="1" status="statue">
        <tr style="<s:if test="!#statue.odd">background-color: grey</s:if>">
            <td>下标=<s:property value="#statue.index"/> </td>
            <td>是否第一条: <s:property value="#statue.first"/></td>
            <td>是否最后一条:<s:property value="#statue.last"/> </td>
            <td>是否奇偶行:<s:property value="#statue.odd"/><br/></td>
        <tr>
        </s:iterator>
    
        </table>

    •  字符串分割标签《s:generator》

    <s:generator separator=";" val="'aa;bb;cc'" var="strs">
            遍历字符串:<s:iterator var="str" value="#strs">
                子串为:<s:property value="#str"/>
            </s:iterator>
        </s:generator>

        注意:<s:generator separator=";" val="'aa;bb;cc'" var="strs"> separator属性为分隔符,val属性为要分割的字符串,而var是指分割后的结果(为字符串数组)存放在非狭义值栈中且对象名为strs。注意这里的val="'aa;bb;cc'" 字符串里要有单引号,否则ognl表达式把它当成对象名到狭义值栈力的找,而不是当成字符串。

    结果:

    •  append和merge标签

        append标签:将多个集合或者数组进行追加。

        merge标签:将多个集合或者数组进行交叉合并。

    结果:


    •    subset标签:对集合进行截取

     

    结果:


      2.6  ajax标签

    • 使用前提:

         1. 必须引入支持ajax标标签的jar包。(struts2-dojo-plugin-2.3.14.jar)

         2. 通过指令元素引入标签。<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

         3. 在head标签内引入<sx:head />标签

         4. 使用标签

    • A、 <sx:datetimepicker>标签(不推荐使用,推荐使用my97插件)
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ taglib prefix="s"  uri="/struts-tags"%>
        <%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <sx:head/>
    </head>
    <body>
        <sx:datetimepicker></sx:datetimepicker>
    </body>
    </html>

    结果:


      B、 选项卡标签<sx:datetimepicker>

    结果:


      C、树形节点(建议使用ZTree插件)

     结果:

     

  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/shyroke/p/6576046.html
Copyright © 2011-2022 走看看