当前位置: 代码迷 >> 综合 >> Struts2 标签库 [Tablib]
  详细解决方案

Struts2 标签库 [Tablib]

热度:93   发布时间:2023-12-21 17:09:02.0
Struts2 Taglib 抽象了不同表示技术,现在 Struts2主要支持三种表示技术: JSP,FreeMarkerVelocity。但部分的 Tag在三种表示技术下都可以使用,但是也有部分只能在某一种情况下使用。
Tab 可以分为两类:通用标签和 UI标签。
4.1 节 通用标签
通用标签用来在页面表示的时候控制代码执行的过程,这些标签也允许从 Action或者值堆栈中取得数据。例如地域, JavaBeansURLs,和 action
控制标签控制程序执行,例如: ifelse,iterator
数据标签管理数据的取得和创建,例如: beanpush,i18n
控制标签
 
if 标签
描述
  If 标签用来控制基本的条件处理流程,通常和 else标签或者 elseif标签连用。
参数
名字
是否必须
默认值
可否使用表达式
类型
描述
id
String
用来表示该元素,对于 UIForm标签来说直接转变为 HTML id属性
test
Boolean
用来决定是否显示标签内部内容的表达式
例子
<s:if test="%{false}">
    <div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
    <div>Will Be Executed</div>
</s:elseif>
<s:else>
    <div>Will Not Be Executed</div>
</s:else>
elseIf 标签
参考 if标签
 
else 标签
参考 if标签
append 标签
描述
用来做 iterator标签的辅助,将不同 iterator中的内容合在一个 iterator中。
参数
名字
是否必须
默认值
可否使用表达式
类型
描述
id
String
用来保存结果 iterator的对象在 value context中的名字。
例子
Action
public class AppendIteratorTagAction extends ActionSupport {
 private List myList1;
 private List myList2;
 private List myList3;
 public String execute() throws Exception {
     myList1 = new ArrayList();
     myList1.add("1");
     myList1.add("2");
     myList1.add("3");
     myList2 = new ArrayList();
     myList2.add("a");
     myList2.add("b");
     myList2.add("c");
     myList3 = new ArrayList();
     myList3.add("A");
     myList3.add("B");
     myList3.add("C");
     return "done";
 }
 public List getMyList1() { return myList1; }
 public List getMyList2() { return myList2; }
 public List getMyList3() { return myList3; }
标签使用
<s:append id="myAppendIterator">
     <s:param value="%{myList1}" />
     <s:param value="%{myList2}" />
     <s:param value="%{myList3}" />
</s:append>
<s:iterator value="%{#myAppendIterator}">
     <s:property />
</s:iterator>
generator 标签(JSP Tag
描述
val属性生成一个 iterator
参数
例子
1:
生成一个简单的 iterator,并且使用 iterator标签打印出内容。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">
 <s:iterator>
     <s:property /><br/>
 </s:iterator>
</s:generator>
2:
生成一个 iterator,使用 count属性。因为 count属性值为 3,所以只有前三个内容( aaa,bbb,ccc)在生成的 iterator中。
Generate an iterator with count attribute
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">
 <s:iterator>
     <s:property /><br/>
 </s:iterator>
</s:generator>
3:
生成 iterator,使用了 id属性,之后生成的对象放在 pageContext中,可以通过指定的 id来访问。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" />
<%
 Iterator i = (Iterator) pageContext.getAttribute("myAtt");
 while(i.hasNext()) {
     String s = (String) i.next();
%>
     <%= s %> <br/>
<%
%>
4:
生成 iterator,使用 converter属性,这里的 convertor仅仅将每一个对象添加了一个 "converter-"前缀。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}">
 <s:iterator>
     <s:property /><br/>
 </s:iterator>
</s:generator>
public class GeneratorTagAction extends ActionSupport {
  ....
  public Converter getMyConverter() {
     return new Converter() {
         public Object convert(String value) throws Exception {
             return "converter-"+value;
         }
     };
  }
  ...
}
iterator 标签
描述
迭代处理一个 java.util.Connection或者 java.util.Iterator对象
参数
名字
是否必须
默认值
可否使用表达式
类型
描述
id
String
Id
status
Boolean
如果指定,在循环的过程中会保留一个 IteratorStatus类型的变量,该变量用来查询当前迭代的状态
value
String
被迭代的对象
例子
1
<s:iterator value="days">
  <p>day is: <s:property/></p>
</s:iterator>
2
<s:bean name="org.apache.struts2.example.IteratorExample" id="it">
  <s:param name="day" value="'foo'"/>
  <s:param name="day" value="'bar'"/>
</s:bean>
<p/>
<table border="0" cellspacing="0" cellpadding="1">
<tr>
  <th>Days of the week</th>
</tr>
<p/>
<s:iterator value="#it.days" status="rowstatus">
  <tr>
    <s:if test="#rowstatus.odd == true">
      <td style="background: grey"><s:property/></td>
    </s:if>
    <s:else>
      <td><s:property/></td>
    </s:else>
  </tr>
</s:iterator>
</table>
3
<s:iterator value="groupDao.groups" status="groupStatus">
     <tr
class="<s:if test="#groupStatus.odd == true ">odd</s:if><s:else>even</s:else>">
         <td><s:property value="name" /></td>
         <td><s:property value="description" /></td>
         <td>
             <s:iterator value="users" status="userStatus">
                 <s:property value="fullName" />
<s:if test="!#userStatus.last">,</s:if>
             </s:iterator>
         </td>
     </tr>
 </s:iterator>
merge 标签(append
描述
参数
例子
 
sort 标签(JSP-Tag
描述
对一个可以迭代的对象进行排序操作。
 
参数
 
名字
是否必须
默认值
可否使用表达式
类型
描述
Comparator
java.util.Comparator
排序用的比较器
Source
String
排序对象
例子
1:
<s:sort comparator="myComparator" source="myList">
     <s:iterator>
     <!-- do something with each sorted elements -->
     <s:property value="..." />
     </s:iterator>
</s:sort>
2:
<s:sort id="mySortedList" comparator="myComparator" source="myList" />
<%
   Iterator sortedIterator = (Iterator) pageContext.getAttribute("mySortedList");
   for (Iterator i = sortedIterator; i.hasNext(); ) {
     // do something with each of the sorted elements
   }
%>
subset
描述
递归 iterator的一部分
参数
名字
是否必须
默认值
可否使用表达式
类型
描述
count
False
Integer
Iterator 中被递归的一部分的 item的数量
Decider
org.apache.struts2.util.
SubsetIteratorFilter.Decider
用来判断 iterator中的 item是否包含在最终的 subset内部
Source
String
Iterator 的对象
Start
Integer
开始位置
例子
Java
public class MySubsetTagAction extends ActionSupport {
     public String execute() throws Exception {
        l = new ArrayList();
        l.add(new Integer(1));
        l.add(new Integer(2));
        l.add(new Integer(3));
        l.add(new Integer(4));
        l.add(new Integer(5));
        return "done";
     }
     public Integer[] getMyArray() {
        return a;
     }
     public List getMyList() {
        return l;
      }
     public Decider getMyDecider() {
     return new Decider() {
         public boolean decide(Object element) throws Exception {
             int i = ((Integer)element).intValue();
             return (((i % 2) == 0)?true:false);
         }
     };
     }
 }
<!-- s: List basic -->
   <s:subset source="myList">
      <s:iterator>
         <s:property />
      </s:iterator>
   </s:subset>
<!-- B: List with count -->
   <s:subset source="myList" count="3">
      <s:iterator>
          <s:property />
      </s:iterator>
    </s:subset>
<!--  C: List with start -->
     <s:subset source="myList" count="13" start="3">
        <s:iterator>
          <s:property />
        </s:iterator>
     </s:subset>
<!--  D: List with id -->
     <s:subset id="mySubset" source="myList" count="13" start="3" />
     <%
         Iterator i = (Iterator) pageContext.getAttribute("mySubset");
         while(i.hasNext()) {
     %>
     <%=i.next() %>
     <%  } %>
<!--  D: List with Decider -->
    <s:subset source="myList" decider="myDecider">
  相关解决方案