Archive for 四月, 2009

struts2.0标签应用(2)–for循环的实现

 

Java代码

<s:bean name="org.apache.struts2.util.Counter" id="counter">    
  <s:param name="first" value="1" />    
  <s:param name="last" value="10" />    
  <s:iterator>    
    counter:<s:property value="current-1"/>    
  </s:iterator>    
</s:bean>    

其中first属性指定循环起始值,last指定循环终止值,其它相关属性可以查看org.apache.struts2.util.Counter类源码。在下面迭代器中输入循环的当前值,即:current-1

Counter类源码

/* 
 * $Id: Counter.java 471756 2006-11-06 15:01:43Z husted $ 
 * 
 * Licensed to the Apache Software Foundation (ASF) under one 
 * or more contributor license agreements.  See the NOTICE file 
 * distributed with this work for additional information 
 * regarding copyright ownership.  The ASF licenses this file 
 * to you 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.util;  
  
import java.io.Serializable;  
  
  
/** 
 * A bean that can be used to keep track of a counter. 
 * <p/> 
 * Since it is an Iterator it can be used by the iterator tag 
 * 
 */  
public class Counter implements java.util.Iterator, Serializable {  
  
    private static final long serialVersionUID = 2796965884308060179L;  
  
    boolean wrap = false;  
  
    // Attributes —————————————————-  
    long first = 1;  
    long current = first;  
    long interval = 1;  
    long last = -1;  
  
  
    public void setAdd(long addition) {  
        current += addition;  
    }  
  
    public void setCurrent(long current) {  
        this.current = current;  
    }  
  
    public long getCurrent() {  
        return current;  
    }  
  
    public void setFirst(long first) {  
        this.first = first;  
        current = first;  
    }  
  
    public long getFirst() {  
        return first;  
    }  
  
    public void setInterval(long interval) {  
        this.interval = interval;  
    }  
  
    public long getInterval() {  
        return interval;  
    }  
  
    public void setLast(long last) {  
        this.last = last;  
    }  
  
    public long getLast() {  
        return last;  
    }  
  
    // Public ——————————————————–  
    public long getNext() {  
        long next = current;  
        current += interval;  
  
        if (wrap && (current > last)) {  
            current -= ((1 + last) - first);  
        }  
  
        return next;  
    }  
  
    public long getPrevious() {  
        current -= interval;  
  
        if (wrap && (current < first)) {  
            current += (last - first + 1);  
        }  
  
        return current;  
    }  
  
    public void setWrap(boolean wrap) {  
        this.wrap = wrap;  
    }  
  
    public boolean isWrap() {  
        return wrap;  
    }  
  
    public boolean hasNext() {  
        return ((last == -1) || wrap) ? true : (current <= last);  
    }  
  
    public Object next() {  
        return new Long(getNext());  
    }  
  
    public void remove() {  
        // Do nothing  
    }  
}  

 
 

struts2.0标签应用(1)

%{}用于计算表达式
如%{10+20}结果将输出30
如%{"a"+"b"}结果将输出"ab"
#通常强调从上下文取
如#parameters.name[0]等价于request.getParameter("name")
如#session.name等价于session.getAttribute("name")
如#request.name等价于request.getAttribute("name")
%{#}仍然用于计算表达式,只不过操作元可以是变量
如先定义一个变量
<s:set name="age" value="%{25}"/>
则%{#age}将输出25,也可以省略"#",写为%{age}
若将age加10,可这么写:
%{#age+10},将输出30.不能省略"#"。也就说变量用于计算时不能省略"#"