zoukankan      html  css  js  c++  java
  • Struct标签

    • 通用标签:

                   1. property

                   2. set

                             i.          默认为action scope,会将值放入request和ActionContext中

                             ii.          page、request、session、application

                  3.  bean

                  4.  include       (对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)

                  5.  param

                  6.  debug

    • 控制标签

                  1.  if elseif else

                  2.  iterator

                             i.          collections map enumeration iterator array

                  3.  subset

    • UI标签

                  1.  theme

                             i.         simple xhtml(默认) css_xhtml ajax

    • AJAX标签

                  基本不用,直接用Ajax框架

    • $ # %的区别

                  1.  $用于i18n和struts配置文件

                  2.  #取得ActionContext的值

                  3.  %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用

                             i.     参考<s:property 和 <s:include>

    说明一点,每一个标签的属性,有的是字符串,有的是Ognl表达式

    比如标签property:

        如果这个属性是Object类型,就会把属性value里的字符串解析成Ognl表达式

     property

     实例:

    <action name="tags" class="com.bjsxt.struts2.tags.TagsAction">
                <result>/tags.jsp</result>
     </action>

     TagsAction:

    public class TagsAction extends ActionSupport {
    
        private String password;
    
        private String username;
    
        public TagsAction() {
        }
    
        public String execute() {
            this.addFieldError("fielderror.test", "wrong!");
            return SUCCESS;
        }
        
        public String getPassword() {
            return password;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
        
        public void setUsername(String username) {
            this.username = username;
        }
        
    }
    View Code

     tags.jsp

     <li>property: <s:property value="username"/> </li>
    <li>property 取值为字符串: <s:property value="'username'"/> </li> <li>property 设定默认值: <s:property value="admin" default="管理员"/> </li> <li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li>
    •     对于第一行,因为property的value值是ognl表达式,所以直接去值栈中取
    •     如果想表达的是一个普通字符串,那么就用双引号里面加上单引号
    •     值栈里面没有叫做admin的变量,所以为他设定默认值,他才有用 

    set

          什么时候会用到set标签

          只是做jsp开发的时候很少能用到,但是有时候可以为一个特别长或者特别难写的变量设置别名等,可能会用到

      可见id和name都不用设置了,只需要var就行

    •    scope范围,不设置的话默认是action,指的是这个变量会放在request 和 ActionContext
    •     如果设置的话,就放在设置的范围里面
          默认范围:
    <li>set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li> <li>set 从request取值: <s:property value="#request.adminName" /></li> <li>set 从ActionContext取值: <s:property value="#adminName" /></li>

    设定范围 <li> 范围为page: <s:set name="adminPassword" value="password" scope="page"/></li> <li> 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %> --%> <li> 范围为session: <s:set var="adminPassword" value="password" scope="session"/></li> <li> 从相应范围取值: <s:property value="#session.adminPassword"/> </li>

    bean

    bean的作用就是生成一个类的对象

          <li>bean 定义bean,并使用param来设定新的属性值:
                <s:bean name="com.bjsxt.struts2.tags.Dog" >
                    <s:param name="name" value="'pp'"></s:param>   //这个name的属性值,就是Dog类的成员,表示为哪一个成员赋值
                    <s:property value="name"/>                     
                </s:bean>            
            </li>

    Dog:

    package com.bjsxt.struts2.tags;
    
    public class Dog {
        
        private String name;
        
        public Dog() {
            
        }
    
        public Dog(String name) {
            super();
            this.name = name;
        }
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "dog: " + name;
        }
    }
    View Code

            当使用bean的时候,就会生出一个对象,并且压到栈顶,在bean标签的内部可以使用这个对象,但是一旦bean标签结束,这个对象就会从栈顶抛出,所以在bean标签外部是访问不到的。(可以用debug标签做测试,在内部可以看到在外部看不到)

           但是如果在外部想访问怎么办?

           这时候就要使用val属性,把这个对象放在valueContext里面

            <li>bean 查看debug情况:
                <s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">
                    <s:param name="name" value="'oudy'"></s:param>
                </s:bean>
                拿出值:
                <s:property value="#myDog.name"/>            
            </li>

    Include

             尽量少用这个标签,处理中文特别麻烦。

             Jsp里面有两个包含文件的方式,<%   <? ,用这两种就好,不要用这个标签

            <li>include _include1.html 包含静态英文文件
                <s:include value="/_include1.html"></s:include>
            </li>
            
            <li>include _include2.html 包含静态中文文件
                <s:include value="/_include2.html"></s:include>
            </li>
            
            <li>include _include1.html 包含静态英文文件,说明%用法
                <s:set var="incPage" value="'/_include1.html'" />
                <s:include value="%{#incPage}"></s:include>
            </li>

       include的value值就是一个普通字符串,而不是ognl表达式

       在第3个例子中,如果想把incPage从字符串变成ognl表达式

       使用%{}

    if

            <li>if else: 
                age = <s:property value="#parameters.age[0]" /> <br />
    <s:if test="#parameters.age[0] < 0">wrong age!</s:if>
    <s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
    <s:else>yeah!</s:else><br />

    <s:if test="#parameters.aaa == null">null</s:if>

    </li>

           注意,每一个参数都有可能是数组,不管传过来几个值,如果想取第一个值,都要加[0]

           valueContext里的parameters指的是点击链接带过来的参数      

    <a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>

        

            每次都写#parameters.age[0]太麻烦,这时候就看出来set标签的好处了

           

            <s:set var="age" value="#parameters.age[0]" />
            <s:if test="#age < 0">wrong age!</s:if>

    iterator

        就是遍历,理论上可以遍历以下几种集合

               collections map enumeration iterator array

        ognl表达式里面大括号就是一个集合,默认会转化成list

            <li>遍历集合:<br />
            <s:iterator value="{1, 2, 3}" >
                <s:property/> |
            </s:iterator>
            </li>
            <li>自定义变量:<br />
            <s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
                <s:property value="#x.toUpperCase()"/> |
            </s:iterator>
            </li>
            <li>使用status:<br />
            <s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
                <s:property/> | 
                遍历过的元素总数:<s:property value="#status.count"/> |
                遍历过的元素索引:<s:property value="#status.index"/> |
                当前是偶数?:<s:property value="#status.even"/> |
                当前是奇数?:<s:property value="#status.odd"/> |
                是第一个元素吗?:<s:property value="#status.first"/> |
                是最后一个元素吗?:<s:property value="#status.last"/>
                <br />
            </s:iterator>
            
            </li>

    结果是

    Map:

    <li>
            <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
                <s:property value="key"/> | <s:property value="value"/> <br />
            </s:iterator>
            </li>
            
            <li>
            <s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
                <s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
            </s:iterator>
            </li>

    UI

            UI标签用的并不多

            主要说一个 theme(主题)

            有四种形式

            

               simple     xhtml(默认)      css_xhtml       ajax

           

            主题就像页面皮肤

            当我们在视图上写html源码时,在客户端展现出来的是经过处理的,并不是原封不动的源码,不同的theme可以解析成不同的结果

             主题有点像抽象工厂,当我们选择一种时就换一种皮肤

            我们可以配置自己的主题,也可以在配置文件中换成其他主题 

  • 相关阅读:
    设计模式6大原则依赖倒置原则
    HTML5开发HTML5入门
    设计模式6大原则迪米特法则
    设计模式6大原则接口隔离原则
    Android ROM开发ubuntu下编译CyanogenMod生成SDK
    设计模式6大原则单一职责原则
    Android杂谈修改Android系统内/system目录权限使其可读写
    [转]SMTP协议
    QQ发送邮件失败的解决办法
    开始→运行→命令集锦
  • 原文地址:https://www.cnblogs.com/tech-bird/p/4158042.html
Copyright © 2011-2022 走看看