`

struts2标签02

阅读更多

struts2标签02

34. property  

property标签用于输出值栈中的对象的属性值,使用value属性来指定要输出的对象属性,如果没有指定value属性,那么默认输出栈顶对象。

属性如下:

1. default: 可选,如果需要输出的属性值为null,则显示的default属性指定的值 

2. escape: 可选,指定是否escapeHTML代码 

3. value: 可选,指定需要输出的属性值。如果没指定,默认输出ValueStack栈顶的值 

4. id: 可选,指定该元素的标识 

例子:

<s:property value="username" default="游客"/>

取出栈顶对象(通常是action)的username 属性并输出,如果没有找到username属性,那么输出“游客”。

35. push 

push标签用于将某个值放到ValueStack的栈顶,可以跟简单的访问该值。
属性:
value 必填,指定需要放到ValueStack栈顶的值\

id 可选,指定该标签的ID
下面代码,讲一个值放到ValueStack的栈顶,从而可以通过<s:property.../>标签来访问
代码如下:
<!--使用bean标签创建一个JavaBean实例,并将其放入Stack Context-->
<s:bean  name="lee.Person"  id="p">
   <s:param  name="name"  value="'yeeku'"/>
   <s:param   name="age"  value="29"/>
</s:bean>
<s:push   value="#p">
   <s:property   value="name"/>
   <s:propery   value="age"/>

</s:push>

36. radio  

radio标签的用法与checkboxlist的用法几乎完全相同,一样可以指定label, list, listKey, listValue等属性。例子代码如下:
<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>使用s:radio生成多个单选框</title>
<s:head/> 

</head>
<body>
<h3>使用s:radio生成多个单选框</h3>
<s:form>
<!-- 使用简单集合来生成多个单选框 -->
<s:radio name="a" label="请选择您喜欢的图书" labelposition="top"
list="{'Spring2.0' , 'Spring In Action' , 'JavaScript: The Definitive Guide'}"/>
<!-- 使用简单Map对象来生成多个单选框 -->
<s:radio name="b" label="请选择您想选择出版日期" labelposition="top"
list="#{'Spring2.0':'2006年10月' , 'J2EE':'2007月4月' , 'Ajax':'2007年6月'}"
listKey="key"
listValue="value"/>
<s:bean name="lee.BookService" id="bs"/>
<!-- 使用集合里放多个JavaBean实例来生成多个单选框 -->
<s:radio name="c" label="请选择您喜欢的图书" labelposition="top"
list="#bs.books"
listKey="author"
listValue="name"/>
</s:form>
</body>
</html>

37. reset 

reset标签

reset标签输出一个重置按钮

名称

必需

默认

类型

描述

type

input

String

要使用的重置按钮的内容,inputbutton


例子:
<s:reset value="重置"></s:reset>

<s:reset type="button" label="重置"></s:reset>

38. select 

下拉列表

s:select 标签输出一个下拉列表框,相当于HTML代码中的<select/>

名称

必需

默认

类型

描述

list

Cellection Map Enumeration Iterator array

要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为MapMapkey成为选项的valueMapvalue会成为选项的内容

listKey

String

指定集合对象中的哪个属性作为选项的value

listValue

String

指定集合对象中的哪个属性作为选项的内容

headerKey

String

设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置

空值

headerValue

String

显示在页面中header选项内容

emptyOption

 

 

false

 

Boolean

 

是否在header选项后面添加一个空选项

multiple

false

Boolean

是否多选

size

Integer

显示的选项个数

例子:

<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<h3>使用namelist属性,list属性的值是一个列表</h3>
<s:form>
    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"/>

</s:form>
<h3>使用namelist属性,list属性的值是一个Map</h3><s:form>
   <s:select label="最高学历" name="education" list="#{1:'高中',2:'大学',3:'硕士',4:'博士'}"/>
</s:form>
<h3>使用headerKeyheaderValue属性设置header选项</h3><s:form>
<s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"      headerKey="-1" headerValue="请选择您的学历"/></s:form>
<h3>使用emptyOption属性在header选项后添加一个空的选项</h3>
<s:form>
  <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"
    headerKey="-1" headerValue="请选择您的学历"
   emptyOption="true"/>
</s:form>

<h3>使用multiple属性设置多选</h3>
<s:form>
   <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"

       headerKey="-1" headerValue="请选择您的学历"
   emptyOption="true"
       multiple="true"/></s:form>
<h3>使用size属性设置下拉框可显示的选项个数</h3>
<s:form>
  <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"  headerKey="-1" headerValue="请选择您的学历
   emptyOption="true"
  multiple="true" size="8"/>
</s:form> 

<h3>使用listKeylistValue属性,利用Action实例的属性(property)来设置选项的值和选项的内容</h3>

<s:form>
  <s:select label="最高学历" name="education" list="educations"
 listKey="id" listValue="name"/>
</s:form>

39.  set 

set标签是将某个值放到指定范围内, 比如说 student.teacher.parent.age 每次访问这个属性不仅性能低,而且代码可读性很差,为了解决这个问题,可以将这个值设置为一个新值,并且放入指定范围内。
标签属性:
name 是必填属性,是重新生成的新变量的名字 
scope 可选属性,指定新变量被放置的范围,可以接受application,session,request,page,action 5个值 没有指定默认是Stack Context 
value 可选属性,指定变量的值 如果没有指定,使用ValueStack栈顶的值赋给新变量 
id 可选属性,指定新元素的引用ID 

下面是个例子: 
<!-- 使用bean标签定义一个javaBean实例--!> 
<s:bean name="lee.Person" id="p"> 
<s:param name="name" value="zhangsan"/> 
<s:param name="age" value="29"/> 
</s:bean> 
p放入默认范围内 
<s:set value="#p" name="test"/> 
<s:property value="#test.name"/> <br> 
<s:property value="#test.age"/> <br> 
p放入application范围内。 
<s:set value="#p" name="test" scope="application"/> 
<s:property value="#attr.test.name"/> <br> 
<s:property value="#attr.test.age"/> <br> 
p放入session范围内。 
<s:set value="#p" name="test" scope="session"/> 
${sessionScope.test.name} <br> 
${sessionScope.test.age} <br> 

40.sort 

对一个可以迭代的对象进行排序操作。  

参数

名字

是否必须

默认值

可否使用表达式

类型

描述

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
   }
%>

41. submit 

按钮

Submit标签输出一个按钮,submit标签和form标签使用可以提供异步表单提交功能。Submit标签可以输出以下三种类型的提交按钮:

Input 等价于 HTML代码<input type=submit>
Image 等价于 HTML代码 <input type="image">
Button<button type="submit"></button>

名称

必需

默认

类型

描述

type

 

 

input

 

String

 

要使用的提交按钮的类型,有效值:input button image

src

 

 

 

String

 

image类型的提交按钮设置图片地址。该属性对inputbutton类型的提交按钮无效

action

String

指定处理提交请求的action

method

String

指定处理提交请求的action的方法


实例
实例1.
<s:submit type="image" method="login" src="images/login.jpg"></s:submit>
页面输出:
<input type="image" alt="Submit" src="images/login.jpg" id="user__login" name="method:login" value="Submit"/>
 
实例2.<s:submit type="button" action="selectTag" method="login" label="登陆"></s:submit>
页面输出:
<button type="submit" id="user_selectTag_login" name="action:selectTag!login" value="Submit">登陆</button>
 
Struts2预定义的前缀:
1。method   method:login
使用method前缀,来取代action默认的execute()方法的执行。
<s:form action="user">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆" name="method:login"></s:submit>
   <s:submit value="注册" name="method:register"></s:submit>
</s:form>
 
注意:1。input类型的按钮,不能用label设置按钮上的文本,只能用value
2、action前缀
使用action前缀,取代form标签指定的action,导向到另一个action进行处理。
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="注册" name="action:register"></s:submit>
</s:form>
 
2、redirect前缀
使用redirect前缀请求重定向到其他的url,甚至可以是web英语程序外部的url。
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="搜索" name="redirect:www.google.com"></s:submit>
</s:form>
 
2、redirect-action前缀
使用redirect-action前缀请求重定向到其他的action.
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="搜索" name="redirect-action:register"></s:submit>
</s:form>

42. 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">
           <s:iterator>
                <s:property />
           </s:iterator>
    </s:subset>

43. tabbedPanel 

<s:tabbedPanel>标签,用来在HTML页面中生成类似于Windows程序的Tab页,从而可以在有限的空间中放置更多的内容。tabbedPanel标签生成的Tab页的内容可以是静态的,也可以是动态的。如果是静态的,则直接指定Tab页面的内容,如果是动态的,则可以使用Ajax方式来动态加载Tab页的内容。
 tabbedPanel标签生成整个Tab框架,而tabbedPanel标签类的div子标签则生成的单独的Tab页,每个div标签生成一个Tab页。因为div标签本身是一个Ajax标签,允许内容动态改变,因此每个Tab页的内容可以动态改变。 

1 、 创建action类,类名为DateACtion.java,包名为:com.teana.action,代码如下:

package com.teana.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;
/**
 * @author TEANA -- 2010-4-10
 * struts2 ajax submit 按钮应用
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
public class DateAction extends ActionSupport
{
 private static final long serialVersionUID = 5709206967517064698L;
 private Date now;

 public Date getNow()
 {
  return now;
 }

 public void setNow(Date now)
 {
  this.now = now;
 }
 
 public String execute() throws Exception
 {
  now = new Date();
  return SUCCESS;
 }
}

2、创建tabbedPanel.jsp页面,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>struts 2 ajax s:div</title>
    <s:head theme="ajax"/>
  </head>
  <body>
    <center>
     <br/><br/>
     <h5 style="color: purple;">struts2 s:tabbedPanel 实现AJAX效果</h5>
     <br/>
      </center>
     <s:url id="T" value="getDate.action" />
     <s:tabbedPanel id="tp1" closeButton="pane" theme="ajax" doLayout="true" selectedTab="second" labelposition="left">
      <s:div id="first" label="第一个div" theme="ajax">
       静态的DIV
      </s:div>
      <s:div name="second" label="第二个div" theme="ajax" href="%{T}" updateFreq="6000" delay="3000">
       3:每六秒钟刷新一次,但有三秒延迟
      </s:div>
     </s:tabbedPanel>
  </body>
</html>

3 、在struts.xml文件中配置action,代码如下:

 ……

<action name="getDate" class="com.teana.action.DateAction">
   <result>/jsp/ajax/showDate.jsp</result>
</action>

 ……

4 、编写showDate.jsp页面,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head></head>
  <body>
 服务器的当前时间为:<font color="red"><s:date name="now" format="yyyy-MM-dd HH:mm:ss"/></font>
  </body>
</html>

44. text 

用于输出国际化消息,和i18n结合使用。

示范代码:

<s:i18n name="ApplicationMessages"> 
     <s:text name="HelloWorld" /> 
</s:i18n> 

详细情况请参考 i180n

45.  textarea 

Textarea标签输出一个HTML多行文本输入控件,等价于HTML代码:<textarea />

 

名称

必需

默认

类型

描述

cols

Integer

列数

rows

Integer

行数

readonly

false

Boolean

当该属性为true时,不能输入

wrap

false

Boolean

指定多行文本输入控件是否应该换行

id

 

 

 

Object/String

 

用来标识元素的id。在ui和表单中为HTMLid属性

 

 

例子:

<s:textarea name="personal" cols="10" rows="5" label="个人简历"></s:textarea>

45. textfield 

单行文本框

Textfield标签输出一个HTML单行文本输入控件,等价于HTML代码<input type=text>

名称

必需

默认

类型

描述

maxlength

Integer

文本输入控件可以输入字符的最大长度

readonly

false

Boolean

当该属性为true时,不能输入

size

Integer

指定可视尺寸

id

 

Object/String

用来标识元素的id。在ui和表单中为HTMLid属性

 

例子:

<s:form action="register" method="post">

    <s:textfield name="username" label="用户名"></s:textfield>

</s:form>

46. token 

token标签是用于防止多次提交的标签。避免了刷新页面时多次提交,如果需要该标签起作用,则应该在Struts2的配置文件中启用TokenInterceptor拦截器或TokenSessionStoreInterceptor拦截器。

token标签的实现原理是在表单中拉架一个隐藏域,每次加载该页面时,该隐藏域的值都不相同。而TokenInterceptor拦截器则拦截所有用户请求,如果两次请求时该隐藏域的值相同,则阻止表单提交。

使用该标签很简单,如下代码:

<h3>使用s:token防止重复提交</h3>
<s:form>
<s:token/>
</s:form>

从访问后产生的HTML页面的源代码可以看到如下HTML代码:

<input type="hidden" name="struts.token.name" value="struts.token"/>
<input type="hidden" name="struts.token" value="NUM1WVZQO3QTGKNZAKD7OA7C2YKWULVJ"/>

47. tree 

treetreenode标签可以在页面生成一个树形结构,其中tree生成一个树形结构,treenode生成一个树节点。例子如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>使用s:trees:treenode标签生成静态树</title>
<s:head theme="ajax" debug="true"/>
</head>
<body>
<h3>使用s:trees:treenode标签生成静态树</h3>
<s:tree label="图书" id="book" theme="ajax" 
showRootGrid="true" showGrid="true" treeSelectedTopic="treeSelected">
    <s:treenode theme="ajax" label="" id="yeeku">
        <s:treenode theme="ajax" label="Spring2.0" id="spring"/>
        <s:treenode theme="ajax" label="J2EE" id="lightweight"/>
        <s:treenode theme="ajax" label="Ajax" id="ajax"/>
    </s:treenode>
    <s:treenode theme="ajax" label="David" id="David">
        <s:treenode theme="ajax" label="JavaScript: The Definitive Guide" id="javascript"/>
    </s:treenode>
    <s:treenode theme="ajax" label="Johnson" id="Johnson">
        <s:treenode theme="ajax" label="Expert One-on-One J2EE Design and Development" id="j2ee"/>
    </s:treenode>
</s:tree>
</body>
</html>

48. treenode 

treetreenode标签可以在页面生成一个树形结构,其中tree生成一个树形结构,treenode生成一个树节点。例子如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>使用s:trees:treenode标签生成静态树</title>
<s:head theme="ajax" debug="true"/>
</head>
<body>
<h3>使用s:trees:treenode标签生成静态树</h3>
<s:tree label="图书" id="book" theme="ajax" 
showRootGrid="true" showGrid="true" treeSelectedTopic="treeSelected">
    <s:treenode theme="ajax" label="" id="yeeku">
        <s:treenode theme="ajax" label="Spring2.0" id="spring"/>
        <s:treenode theme="ajax" label="J2EE" id="lightweight"/>
        <s:treenode theme="ajax" label="Ajax" id="ajax"/>
    </s:treenode>
    <s:treenode theme="ajax" label="David" id="David">
        <s:treenode theme="ajax" label="JavaScript: The Definitive Guide" id="javascript"/>
    </s:treenode>
    <s:treenode theme="ajax" label="Johnson" id="Johnson">
        <s:treenode theme="ajax" label="Expert One-on-One J2EE Design and Development" id="j2ee"/>
    </s:treenode>
</s:tree>
</body>
</html>

49.  updownselect 

updownselect标签

updownselect标签创建一个带有上下移动的按钮的列表框,可以通过上下移动按钮来调整列表框的选项的位置。

名称

必需

默认

类型

描述

list

 

 

 

Cellection Map Enumeration Iterator array

要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为MapMapkey成为选项的valueMapvalue会成为选项的内容

listKey

String

指定集合对象中的哪个属性作为选项的value

listValue

String

指定集合对象中的哪个属性作为选项的内容

headerKey

String

设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

headerValue

String

显示在页面中header选项内容

emptyOption

 

 

false

 

Boolean

 

是否在header选项后面添加一个空选项

multiple

false

Boolean

是否多选

size

Integer

显示的选项个数

moveUplabel

 

String

设置向上移动按钮上的文本

moveDownLabel

 

String

设置向下移动按钮上的文本

selectAllLabel

 

String

设置向全部选择按钮上的文本

allowMoveUp

Boolean

设置是否使用向上移动按钮

allowMoveDown

Boolean

设置是否使用向下移动按钮

allowSelectAll

Boolean

设置是否使用全部选择按钮

实例:
<s:form>
<!-- 使用简单集合来生成可上下移动选项的下拉选择框 -->
<s:updownselect name="a" label="请选择您喜欢的图书" labelposition="top"
    moveUpLabel="向上移动"
    list="{'Spring2.0宝典' , '轻量级J2EE企业应用实战' , 'JavaScript: The Definitive Guide'}"/>
  
<!-- 使用简单Map对象来生成可上下移动选项的下拉选择框
     且使用emptyOption="true"增加一个空选项-->
<s:updownselect name="b" label="请选择您想选择出版日期" labelposition="top"
    moveDownLabel="向下移动"
    list="#{'Spring2.0宝典':'2006年10月' , '轻量级J2EE企业应用实战':'2007月4月' , '基于J2EE的Ajax宝典':'2007年6月'}"
    listKey="key"
    emptyOption="true"
    listValue="value"/>
   
<s:bean name="com.zhaosoft.ui.formtag.BookService" id="bs"/>
<!-- 使用集合里放多个JavaBean实例来可上下移动选项的生成下拉选择框 -->
<s:updownselect name="c" label="请选择您喜欢的图书的作者" labelposition="top"
    selectAllLabel="全部选择" multiple="true"
    list="#bs.books"
    listKey="author"
    listValue="name"/>
</s:form>
 
package com.zhaosoft.ui.formtag;
public class BookService
{
    public Book[] getBooks()
    {
       return new Book[]
       {
           new Book("Spring2.0宝典","zhaosoft"),
           new Book("轻量级J2EE企业应用实战","zhaosoft"),
           new Book("基于J2EE的Ajax宝典","zhaosoft")
       };
    }
}

50. url 

url标签 用于生成一个URL地址,可以通过paramurl标签指定参数,从而指定URL发送请求参数。

url标签的属性:

includeParams 可选,指定是否包含请求参数。该属性的属性值只能为noneget或者all

scheme 可选,用于设置scheme属性

value 可选,指定生成URL的地址。如果不提供就用action属性指定的Action作为URL地址值。

action 可选,指定生成URL的地址为哪个Action,如果Action不提供,就使用value作为URL的地址值。

namespace 可选,该属性指定命名空间

method 可选,指定使用Action的方法

encode 这是一个可选属性,指定是否需要encode请求参数

includeContext 可选,指定是否需要将当前上下文包含在URL地址中。

anchor 可选,指定URL的描点。

id 可选,指定该url元素的引用id

action属性和value属性的作用大致相同。指定action属性,系统会在指定属性后加.action后缀。如果两个都没有指定,就以当前页作为URL的地址值。

实例代码如下:

只指定value属性:<br>

<s:url  value="editGadget.action"/>

<hr>

指定action属性,且使用param传入参数的形式。<br>

<s:url  action="showbook">

    <s:param  name="author"  value="'yeeku'">

</s:url>

既不指定action属性,也不指定value属性,且使用param传入参数的形式。<br>

<s:url  includeParams="get" >

     <s:param  name="id"  value="%{'22'}" />   <!--这里%{  } 有疑问 -->

</s:url>

<hr>

同时指定action属性和value属性,且使用param传入参数的形式<br>

<s:url  action="showBooke"  value="xxxx">

    <s:param  name="author"  value="'yeeku'" />

</s:url>

<!--EndFragment-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics