随笔-34  评论-1965  文章-0  trackbacks-0

在上一篇文章《为struts 2.0做好准备》中,我过于详细地介绍了struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。如果,您看完《为struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。我的e-mail:max.m.yuan@gmail.com。

在介绍常用标志前,我想先从总体上,对struts 1.x与struts 2.0的标志库(tag library)作比较。

  struts 1.x struts 2.0
分类 将标志库按功能分成html、tiles、logic和bean等几部分 严格上来说,没有分类,所有标志都在uri为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非ui标志和ui标志
表达式语言(expression languages) 不支持嵌入语言(el) ognl、jstl、groovy和velcity
以上表格,纯属个人总结,如有所不足或错误,请不吝指正

好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用struts里经常用到的)的标志了。

要在jsp中使用struts 2.0标志,先要指明标志的引入。通过在jsp的代码的顶部加入以下代码可以做到这点。
<%@taglib prefix="s" uri="/struts-tags" %>
  1. 非ui标志
    • if、elseif和else

      描述:
      执行基本的条件流转。

      参数:

      名称必需默认类型描述备注
      testboolean决定标志里内容是否显示的表达式else标志没有这个参数
      idobject/string用来标识元素的id。在ui和表单中为html的id属性

      例子:

      <%@ page contenttype="text/html; charset=utf-8" %>
      <%@ taglib prefix="s" uri="/struts-tags" %>
      doctype html public "-//w3c//dtd html 4.01 transitional//en">
      <html>
          
      <head>
              
      <title>condition flowtitle>
          
      head>
          
      <body>
              
      <h3>condition flowh3>            
              

              
      <s:set name="name" value="<%= "'"   request.getparameter("name")   "'" %>" />
              
      <s:if test="#name == 'max'">
                  max's file here
              
      s:if>
              
      <s:elseif test="#name == 'scott'">
                  scott's file here
              
      s:elseif>
              
      <s:else>
                  other's file here
              
      s:else>        
          
      body>
      html>
      例1 condition.jsp
    • iterator

      描述:
      用于遍历集合(java.util.collection)或枚举值(java.util.iterator)。

      参数:

      名称必需默认类型描述
      statusstring如果设置此参数,一个iteratorstatus的实例将会压入每个遍历的堆栈
      valueobject/string要遍历的可枚举的(iteratable)数据源,或者将放入新列表(list)的对象
      idobject/string用来标识元素的id。在ui和表单中为html的id属性

      例子:

      <%@ page contenttype="text/html; charset=utf-8" %>
      <%@ page import="java.util.list" %>
      <%@ page import="java.util.arraylist" %>
      <%@ taglib prefix="s" uri="/struts-tags" %>

      doctype html public "-//w3c//dtd html 4.01 transitional//en">
      <%
          list list 
      = new arraylist();
          list.add(
      "max");
          list.add(
      "scott");
          list.add(
      "jeffry");
          list.add(
      "joe");
          list.add(
      "kelvin");
          request.setattribute(
      "names", list);
      %>
      <html>
          
      <head>
              
      <title>iteratortitle>
          
      head>
          
      <body>
              
      <h3>names: h3>
              

              
      <ol>
                  
      <s:iterator value="#request.names" status="stuts">                
                      
      <s:if test="#stuts.odd == true">
                          
      <li>white <s:property />li>
                      
      s:if>
                      
      <s:else>
                          
      <li style="background-color:gray"><s:property />li>
                      
      s:else>
                  
      s:iterator>
              
      ol>
          
      body>
      html>
      例2 iterator.jsp
    • i18n

      描述:
      加载资源包到值堆栈。它可以允许text标志访问任何资源包的信息,而不只当前action相关联的资源包。

      参数:

      名称必需默认类型描述
      valueobject/string资源包的类路径(如com.xxxx.resources.appmsg)
      idobject/string用来标识元素的id。在ui和表单中为html的id属性

      例子:

      helloworld=hello wrold!
      例3 classes\ applicationmessages.properties

      <%@ page contenttype="text/html; charset=utf-8" %>
      <%@ taglib prefix="s" uri="/struts-tags" %>

      doctype html public "-//w3c//dtd html 4.01 transitional//en">
      <html>
          
      <head>
              
      <title>internationizationtitle>
          
      head>
          
      <body>
              
      <h3>
                  
      <s:i18n name="applicationmessages">
                      
      <s:text name="helloworld" />
                  
      s:i18n>
              
      h3>
          
      body>
      html>
      例3 i18n.jsp
    • include

      描述:
      包含一个servlet的输出(servlet或jsp的页面)。

      参数:

      名称必需默认类型描述
      valuestring要包含的jsp或servlet
      idobject/string用来标识元素的id。在ui和表单中为html的id属性

      例子:

      <%@ page contenttype="text/html; charset=utf-8" %>
      <%@ taglib prefix="s" uri="/struts-tags" %>

      doctype html public "-//w3c//dtd html 4.01 transitional//en">
      <html>
          
      <head>
              
      <title>iteratortitle>
          
      head>
          
      <body>
              
      <h3>interator pageh3>
              
      <s:include value="/condition.jsp">
                  
      <s:param name="name">maxs:param>
              
      s:include>
              
      <h3>i18nh3>
              
      <s:include value="/i18n.jsp" />
          
      body>
      html>
      例4 include.jsp
    • param

      描述:
      为其他标签提供参数,比如include标签和bean标签. 参数的name属性是可选的,如果提供,会调用component的方法addparameter(string, object), 如果不提供,则外层嵌套标签必须实现unnamedparametric接口(如texttag)。

      value的提供有两种方式,通过value属性或者标签中间的text,不同之处我们看一下例子:

      <param name="color">blueparam>

      <param name="color" value="blue"/>
      (a)参数值会以string的格式放入statck.
      (b)该值会以java.lang.object的格式放入statck.

      参数:

      名称必需默认类型描述
      namestring参数名
      valuestringvalue表达式
      idobject/string用来标识元素的id。在ui和表单中为html的id属性

      例子:
      请参考例4。

    • set

      描述:
      set标签赋予变量一个特定范围内的值。当希望给一个变量赋一个复杂的表达式,每次访问该变量而不是复杂的表达式时用到。其在两种情况下非常有用: 复杂的表达式很耗时 (性能提升) 或者很难理解 (代码可读性提高)。

      参数:

      名称必需默认类型描述
      namestring变量名字
      scopestring变量作用域,可以为application, session, request, page, 或action.
      valueobject/string将会赋给变量的值
      idobject/string用来标识元素的id。在ui和表单中为html的id属性

      例子:
      请参考例1。

    • text

      描述:
      支持国际化信息的标签。国际化信息必须放在一个和当前action同名的resource bundle中,如果没有找到相应message,tag body将被当作默认message,如果没有tag body,message的name会被作为默认message。

      参数:

      名称必需默认类型描述
      namestring资源属性的名字
      idobject/string用来标识元素的id。在ui和表单中为html的id属性

      例子:
      请参考例3。

    • url

      描述:
      该标签用于创建url,可以通过"param"标签提供request参数。

      当includeparams的值时'all'或者'get', param标签中定义的参数将有优先权,也就是说其会覆盖其他同名参数的值。

      参数: 略

      例子:

      <%@ page contenttype="text/html; charset=utf-8" %>
      <%@ taglib prefix="s" uri="/struts-tags" %>
      doctype html public "-//w3c//dtd html 4.01 transitional//en">
      <html>
          
      <head>
              
      <title>urltitle>
          
      head>
          
      <body>
              
      <h3>urlh3>            
              
      <href='value="/i18n.jsp" />'>i18na><br />
              
      <s:url id="url" value="/condition.jsp">
                  
      <s:param name="name">maxs:param>
              
      s:url>        
              
      <s:a href="%{url}">if\elseif\elses:a>
          
      body>
      html>
      例5 url.jsp
    • property

      描述:
      得到'value'的属性,如果value没提供,默认为堆栈顶端的元素。

      参数:

      名称必需默认类型描述
      defaultstring如果属性是null则显示的default值
      escapetruebooelean是否escape html
      value栈顶object要显示的值
      idobject/string用来标识元素的id。在ui和表单中为html的id属性

      例子:
      请参考例2。

  2. ui标志

    ui标志又可以分为表单ui和非表单ui两部分。表单ui部分基本与struts 1.x相同,都是对html表单元素的包装。不过,struts 2.0加了几个我们经常在项目中用到的控件如:datepicker、doubleselect、timepicker、optiontransferselect等。因为这些标志很多都经常用到,而且参数也很多,要在一篇文章详细说明并非易事。

    需要深入了解这些标志的朋友,可以到以下查看以下网址:
    webwork2文档中文化计划(中文)
    tag developers guide(英文)
    本文有相当的内容也来自这两处。

    在此,我虽然不能够详细讲述这些标志,但是可以与大家分享一个来struts 2.0 show case一个例子。

    /*
     * $id: uitagexample.java 420385 2006-07-10 00:57:05z mrdon $
     *
     * 凯发天生赢家一触即发官网 copyright 2006 the apache software foundation.
     *
     * licensed under the apache license, version 2.0 (the "license");
     * you may not use this file except in compliance with the license.
     * you may obtain a copy of the license at
     *
     *      
    http://www.apache.org/licenses/license-2.0
     *
     * unless required by applicable law or agreed to in writing, software
     * distributed under the license is distributed on an "as is" basis,
     * without warranties or conditions of any kind, either express or implied.
     * see the license for the specific language governing permissions and
     * limitations under the license.
     
    */

    package org.apache.struts2.showcase;

    import org.apache.struts2.servletactioncontext;
    import com.opensymphony.xwork2.actionsupport;
    import com.opensymphony.xwork2.validateable;
    import com.opensymphony.xwork2.util.ognlvaluestack;

    import java.util.arraylist;
    import java.util.collections;
    import java.util.date;
    import java.util.hashmap;
    import java.util.list;
    import java.util.map;
    import java.io.file;

    /**
     
    */

    public class uitagexample extends actionsupport implements validateable {
        
        
    private static final long serialversionuid = -94044809860988047l;        
        string name;
        date birthday;
        string bio;
        string favoritecolor;
        list friends;
        
    boolean legalage;
        string state;
        string region;
        file picture;
        string picturecontenttype;
        string picturefilename;
        string favouritelanguage;
        string favouritevehicaltype 
    = "motorcyclekey";
        string favouritevehicalspecific 
    = "yamahakey";
        
        list leftsidecartooncharacters;
        list rightsidecartooncharacters;
        
        list favouritelanguages 
    = new arraylist();
        list vehicaltypelist 
    = new arraylist();
        map vehicalspecificmap 
    = new hashmap();
        
        string thoughts;
        
        
    public uitagexample() {
            favouritelanguages.add(
    new language("englishkey""english language"));
            favouritelanguages.add(
    new language("frenchkey""french language"));
            favouritelanguages.add(
    new language("spanishkey""spanish language"));
            
            vehicaltype car 
    = new vehicaltype("carkey""car");
            vehicaltype motorcycle 
    = new vehicaltype("motorcyclekey""motorcycle");
            vehicaltypelist.add(car);
            vehicaltypelist.add(motorcycle);
            
            list cars 
    = new arraylist();
            cars.add(
    new vehicalspecific("mercedeskey""mercedes"));
            cars.add(
    new vehicalspecific("hondakey""honda"));
            cars.add(
    new vehicalspecific("fordkey""ford"));
            
            list motorcycles 
    = new arraylist();
            motorcycles.add(
    new vehicalspecific("suzukikey""suzuki"));
            motorcycles.add(
    new vehicalspecific("yamahakey""yamaha"));
            
            vehicalspecificmap.put(car, cars);
            vehicalspecificmap.put(motorcycle, motorcycles);
        }
       
            
        
    public list getleftsidecartooncharacters() {
            
    return leftsidecartooncharacters;
        }

        
    public void setleftsidecartooncharacters(list leftsidecartooncharacters) {
            
    this.leftsidecartooncharacters = leftsidecartooncharacters;
        }

            
        
    public list getrightsidecartooncharacters() {
            
    return rightsidecartooncharacters;
        }

        
    public void setrightsidecartooncharacters(list rightsidecartooncharacters) {
            
    this.rightsidecartooncharacters = rightsidecartooncharacters;
        }

            
        
    public string getfavouritevehicaltype() {
            
    return favouritevehicaltype;
        }

        
        
    public void setfavouritevehicaltype(string favouritevehicaltype) {
            
    this.favouritevehicaltype = favouritevehicaltype;
        }

        
        
    public string getfavouritevehicalspecific() {
            
    return favouritevehicalspecific;
        }

        
        
    public void setfavouritevehicalspecific(string favouritevehicalspecific) {
            
    this.favouritevehicalspecific = favouritevehicalspecific;
        }

        
        
    public list getvehicaltypelist() {
            
    return vehicaltypelist;
        }

        
        
    public list getvehicalspecificlist() {
            ognlvaluestack stack 
    = servletactioncontext.getvaluestack(servletactioncontext.getrequest());
            object vehicaltype 
    = stack.findvalue("top");
            
    if (vehicaltype != null && vehicaltype instanceof vehicaltype) {
                list l 
    = (list) vehicalspecificmap.get(vehicaltype);
                
    return l;
            }

            
    return collections.empty_list;
        }

        
        
    public list getfavouritelanguages() {
            
    return favouritelanguages;
        }


        
    public string execute() throws exception {
            
    return success;
        }


        
    /* getters and setters */
               
        
    public string dosubmit() {
            
    return success;
        }
           
        
        
    // === inner class 
        public static class language {
            string description;
            string key;
            
            
    public language(string key, string description) {
                
    this.key = key;
                
    this.description = description;
            }

            
            
    public string getkey() 
                
    return key; 
            }

            
    public string getdescription() 
                
    return description; 
            }

            
        }
        
        
        
    public static class vehicaltype {
            string key;
            string description;
            
    public vehicaltype(string key, string description) {
                
    this.key = key;
                
    this.description = description;
            }

            
            
    public string getkey() return this.key; }
            
    public string getdescription() return this.description; }
            
            
    public boolean equals(object obj) {
                
    if (! (obj instanceof vehicaltype)) 
                    
    return false;
                }

                
    else {
                    
    return key.equals(((vehicaltype)obj).getkey());
                }

            }

            
            
    public int hashcode() {
                
    return key.hashcode();
            }

        }
        
        
        
    public static class vehicalspecific {
            string key; 
            string description;
            
    public vehicalspecific(string key, string description) {
                
    this.key = key;
                
    this.description = description;
            }

            
            
    public string getkey() return this.key; }
            
    public string getdescription() return this.description; }
            
            
    public boolean equals(object obj) {
                
    if (! (obj instanceof vehicalspecific)) {
                    
    return false;
                }

                
    else {
                    
    return key.equals(((vehicalspecific)obj).getkey());
                }

            }

            
            
    public int hashcode() {
                
    return key.hashcode();
            }

        }

    }
    例6 org.apache.struts2.showcase.uitagexample.java

    <%@ page contenttype="text/html; charset=utf-8" pageencoding="utf-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
        
    <title>ui tags exampletitle>
        
    <s:head/>
    head>
    <body>

    <s:actionerror/>
    <s:actionmessage/>
    <s:fielderror />

    <s:form action="examplesubmit" method="post" enctype="multipart/form-data" tooltipconfig="#{'jstooltipenabled':'true'}">
        
    <s:textfield 
                
    label="name" 
                name
    ="name"
                tooltip
    ="enter your name here" />

        
    <s:datepicker
                
    tooltip="select your birthday"
                label
    ="birthday"
                name
    ="birthday" />

        
    <s:textarea
                
    tooltip="enter your biography"
                label
    ="biograph"
                name
    ="bio"
                cols
    ="20"
                rows
    ="3"/>

        
    <s:select
                
    tooltip="choose your favourite color"
                label
    ="favorite color"
                list
    ="{'red', 'blue', 'green'}"
                name
    ="favoritecolor"
                emptyoption
    ="true"
                headerkey
    ="none"
                headervalue
    ="none"/>

        
    <s:select
                
    tooltip="choose your favourite language"
                label
    ="favourite language"
                list
    ="favouritelanguages"
                name
    ="favouritelanguage"
                listkey
    ="key"
                listvalue
    ="description"
                emptyoption
    ="true"
                headerkey
    ="none"
                headervalue
    ="none"/>

        
    <s:checkboxlist
                
    tooltip="choose your friends"
                label
    ="friends"
                list
    ="{'patrick', 'jason', 'jay', 'toby', 'rene'}"
                name
    ="friends"/>

        
    <s:checkbox
                
    tooltip="confirmed that your are over 18"
                label
    ="age 18 "
                name
    ="legalage"/>

        
    <s:doubleselect
                
    tooltip="choose your state"
                label
    ="state"
                name
    ="region" list="{'north', 'south'}"
                value
    ="'south'"
                doublevalue
    ="'florida'"
                doublelist
    ="top == 'north' ? {'oregon', 'washington'} : {'texas', 'florida'}" 
                doublename
    ="state"
                headerkey
    ="-1"
                headervalue
    ="---------- please select ----------"
                emptyoption
    ="true" />

        
    <s:doubleselect
                
    tooltip="choose your vehical"
                label
    ="favourite vehical"
                name
    ="favouritevehicaltype"
                list
    ="vehicaltypelist"
                listkey
    ="key"
                listvalue
    ="description"
                value
    ="'motorcyclekey'"
                doublevalue
    ="'yamahakey'"
                doublelist
    ="vehicalspecificlist"
                doublelistkey
    ="key"
                doublelistvalue
    ="description"
                doublename
    ="favouritevehicalspecific" headerkey="-1"
                headervalue
    ="---------- please select ----------"
                emptyoption
    ="true" />

        
    <s:file
                
    tooltip="upload your picture"
                label
    ="picture" 
                name
    ="picture" />
                
        
    <s:optiontransferselect
                
    tooltip="select your favourite cartoon characters"
                label
    ="favourite cartoons characters"
                name
    ="leftsidecartooncharacters" 
                lefttitle
    ="left title"
                righttitle
    ="right title"
                list
    ="{'popeye', 'he-man', 'spiderman'}" 
                multiple
    ="true"
                headerkey
    ="headerkey"
                headervalue
    ="--- please select ---"
                emptyoption
    ="true"
                doublelist
    ="{'superman', 'mickey mouse', 'donald duck'}" 
                doublename
    ="rightsidecartooncharacters"
                doubleheaderkey
    ="doubleheaderkey"
                doubleheadervalue
    ="--- please select ---" 
                doubleemptyoption
    ="true"
                doublemultiple
    ="true" />
        
        
    <s:textarea
                
    label="your thougths"
                name
    ="thoughts" 
                tooltip
    ="enter your thoughts here" />
                
        
    <s:submit onclick="alert('aaaa');" />
        
    <s:reset onclick="alert('bbbb');" />
    s:form>
        
    body>
    html>
    例6 example.jsp

    <action name="example" class="org.apache.struts2.showcase.uitagexample">
        
    <result>example.jspresult>
        
    <result name="input">example.jspresult>
    action>
    例6 struts.xml代码片段
posted on 2006-10-18 12:02 max 阅读(85689) 评论(160)     所属分类: struts 2.0系列
评论共2页: 1   

评论:
# re: 常用的struts 2.0的标志(tag)介绍 2007-06-19 14:55 |
问题解决:
jsp中加这句
" target="_new" rel="nofollow">http://www.w3.org/1999/xhtml">

去掉这句
" target="_new" rel="nofollow">http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-06-27 11:57 |
@任遨游
不行啊,我按你的办法去处理,没有作用啊。
其它人还有办法吗?  回复  
  
# re: 常用的struts 2.0的標誌(tag)介紹 2007-06-27 16:58 |
請問在tag裡
可以放入javascriprt嗎?
好像不行耶~  回复  
  
# re: 常用的struts 2.0的標誌(tag)介紹 2007-06-27 17:04 |
@jimmy
我指的tag是struts2的tag
在編譯時會過不去
  回复  
  
# re: 常用的struts 2.0的標誌(tag)介紹 2007-06-27 17:36 |
@jimmy
舉例來說
想在加入onchange()
但卻不行
有什麼特別方法或解決之道嗎????
  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-06-29 00:41 | max
@jimmy
关于你可以参考。
而至于的onchange属性可以正常工作的,可能你什么地方弄错了。  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-07-08 22:26 |
expression parameters.formname is undefined ...
我之前犯這錯是因為..
忘了把 doubleselect 包在具有 action 的 內..
  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-07-11 11:08 |
看了之后还是不是很明白,很多都不能在页面上实现
我有点困惑!!!  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-07-25 18:32 |
@jessen
如果困惑,那说明,你还未得其法门,又或者努力不够
坚持多看,学习的过程就是反复的过程,当你突然顿悟的时候,也就一通百通了
当然,如果悟性太低,那看一遍和看100遍的效果其实是一样的,所以嘛,做程序员仅仅靠辛劳是不够的,关键还是天赋。
唉。。。。  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-01 17:26 |
支持!!!!  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-06 16:56 |
在struts.xml文件中如果按这样的配置方式


/demo1/helloworld.jsp




/demo1/helloworld.jsp



在demo1/helloword.jsp文件里如果 那么在生成的页面的源文件会发现 他始终找的是第一个helloword.action 就是demo1里面的 我demo2/helloword.jsp文件里的 找的也是demo1/helloword.action

如何解决在同一个struts配置文件中包名不同 actian name相同的情况 (改名除外)  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-06 16:58 |
更正下 上面的 里面的rsult 里的应该是/demo2/helloworld.jsp不是demo1 打错了  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-08 09:39 | max
@小风
你可以试一下加上不同的namespace  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-10 13:19 |
例1 condition.jsp
" /> 中可以使用value=#request.parameters.name[0]
就好,在include.jsp测试通过。

文章写的不错,希望能写出更多更好的文章  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-14 14:51 |
thanks very much!
  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-16 20:05 |
讲得太好了,你为什么不去出书呢?
如果你去出书,会有更多人受益的!  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-28 17:39 |
问个刚遇到的技术难题,就是如何使用标签遍历一个二维数组???  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-29 16:22 |
请问我在运行struts 2.0 show case这个例子时submit提交按扭怎么在界面中显示不出来呢?  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-29 16:50 |
就是运行后界面上的文本框,下拉列表啊什么的都有显示,但是就是看不到有提交的按扭  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-08-30 09:37 |
vehicaltype car = new vehicaltype("carkey", "car");
vehicaltype motorcycle = new vehicaltype("motorcyclekey", "motorcycle");
vehicaltypelist.add(car);
vehicaltypelist.add(motorcycle);

list cars = new arraylist();
cars.add(new vehicalspecific("mercedeskey", "mercedes"));
cars.add(new vehicalspecific("hondakey", "honda"));
cars.add(new vehicalspecific("fordkey", "ford"));

list motorcycles = new arraylist();
motorcycles.add(new vehicalspecific("suzukikey", "suzuki"));
motorcycles.add(new vehicalspecific("yamahakey", "yamaha"));

vehicalspecificmap.put(car, cars);
vehicalspecificmap.put(motorcycle, motorcycles);
vehicaltype和vehicaltypelist类型和vehicalspecific(),vehicalspecificmap理解不来.  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-09-01 16:25 |
让初学者真的受益匪浅,辛苦了!  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-09-04 12:02 |
我想请教高手一问题:
<%list list=new arraylist();
pagecontext.setattribute("names", list);
list.add("as");
list.add("ghgt");
%>
回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-09-05 00:34 | max
@kzy
没有context没有pagecontext属性,所以你用#attr。  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-09-05 08:21 |
谢谢max的回答
  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍[未登录] 2007-09-07 12:09 |
request.setattribute("names", list);
  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-09-07 14:38 |
@a
我知道request session 和application都能显示出结果来。但是就 pagecontext显示不出来我想问问为什么  回复  
  
# re: 常用的struts 2.0的标志(tag)介绍 2007-09-10 15:05 |
请求帮助,急! 我想用

只有注册用户后才能发表评论。


网站导航:
              
 
网站地图