WebWork2文档中文化计划 Data Tags

本文详细介绍了Struts2框架中的Data标签,包括action、bean、debug、i18n等多个子标签的功能与使用方法,并提供了丰富的代码示例。

Data标签用来提供各种数据相关的功能.范围从显示一个action的直接结果,到获取本地化的数值等.

1.action

         

描述

通过指定命名空间和action名称,该标签允许你在jsp页面直接调用Action. 标签体用来渲染Action执行结果. 除非你设定了executeResult参数为true,否则你在xwork.xml中为该Action指定的Result Processor不会执行.

参数

名称必填缺省类型描述
idfalse String如果设定,将作为该Action在栈中的标识
nametrue Stringaction名字(不包括后缀,如.action)
namespacefalse Stringaction所在命名空间
executeResultfalsefalseBooleanAction的result是否需要被执行
ignoreContextParamsfalsefalseBooleanrequest中的参数是否需要传入该Action

例子

public class ActionTagAction extends ActionSupport {

public String execute() throws Exception {
	return "done";
}

public String doDefault() throws Exception {
	ServletActionContext.getRequest().setAttribute("stringByAction", "This is a String put in by the action's doDefault()");
	return "done";
}
}
<xwork>
   ....
  <action name="actionTagAction1" class="tmjee.testing.ActionTagAction">
      <result name="done">success.jsp</result>
  </action>
   <action name="actionTagAction2" class="tmjee.testing.ActionTagAction" method="default">
      <result name="done">success.jsp</result>
  </action>
   ....
</xwork>
<div>The following action tag will execute result and include it in this page</div>
<br />
<ww:action name="actionTagAction" executeResult="true" />
 <br />
 <div>The following action tag will do the same as above, but invokes method specialMethod in action</div>
<br />
<ww:action name="actionTagAction!specialMethod" executeResult="true" />
 <br />
 <div>The following action tag will not execute result, but put a String in request scope
      under an id "stringByAction" which will be retrieved using property tag</div>
 <ww:action name="actionTagAction!default" executeResult="false" />
 <ww:property value="#attr.stringByAction" />

2. bean

            

描述

实例化一个符合JavaBeans规范的class,标签体内可以包含几个Param元素,用于调用setter方法给此class的属性赋值.如果是定了id属性,则该实例将会放到stack的context中.

参数

名称必填缺省类型描述
nametrue String要被实例化的class名字(必须符合JavaBeans规范)
idfalse String/Object标识该元素

例子

译注

原文中此处Freemarker的例子写法格式可能有误.一般的写法应该为类似:
<@ww.bean ... />的方式

<-- in freemarker form -->
[ww.bean name="com.opensymphony.webwork.example.counter.SimpleCounter" id="counter"]
  [ww:param name="foo" value="BAR"/]
  The value of foo is : [ww:property value="foo"/], when inside the bean tag.<br />
[/ww:bean]
<-- in jsp form -->
<ww:bean name="com.opensymphony.webwork.example.counter.SimpleCounter" id="counter">
	 <ww:param name="foo" value="BAR" />
  The value of foot is : <ww:property value="foo"/>, when inside the bean tag <br />
</ww:bean>

上面的例子初始化了一个叫SimpleCounter的class实例并且给其foo属性赋了值(setFoo('BAR')). 然后该实例被压进Valuestack, 也就是说我们可以通过Property标签调用其getter方法(getFoo())取到相应的值.

上例中, 我们把id设为counter. 导致该实例会被放进stack的context中.你可以通过标签取到该实例

<-- jsp form -->
<ww:property value="#counter" />
<-- freemarker form --> 
[ww:property value="#counter.foo"/]

上面property标签的例子中,#告诉Ognl去context中找id为counter的SimpleCounter实例.

 

3.debug

4.i18n

描述

将某个特定resource bundle放入value stack. 然后通过text标签拿到相应message, 而不是仅限于绑定到当前action的bundle.

参数

名称必填缺省类型描述
nametrue String要使用的resource bundle.(如 foo/bar/customBundle)
idfalse String/Object标识该元素

例子

<ww:i18n name="myCustomBundle">
   The i18n value for key aaa.bbb.ccc in myCustomBundle is <ww:property value="text('aaa.bbb.ccc')" />
</ww:i18n>

5. include

描述

包含servlet的输出(servlet或JSP页面)

参数

名称必填缺省类型描述
valuetrue String包含的jsp或servlet
idfalse Object/String元素标识

例子

<-- One: -->
<ww:include value="myJsp.jsp" />

<-- Two: -->
<ww:include value="myJsp.jsp">
   <ww:param name="param1" value="value2" />
   <ww:param name="param2" value="value2" />
</ww:include>

<-- Three: -->
<ww:include value="myJsp.jsp">
   <ww:param name="param1">value1</ww:param>
   <ww:param name="param2">value2<ww:param>
</ww:include>

示例1 - 包含一个 myJsp.jsp 页面
示例2 - 包含一个 myJsp.jsp 页面,附带参数 param1=value1 和 param2=value2
示例3 - 包含一个 myJsp.jsp 页面,附带参数 param1=value1 和 param2=value2

6.param

描述

为其他标签提供参数,比如include标签和bean标签.
参数的name属性是可选的,如果提供,会调用Component的方法addParameter(String, Object),如果不提供,则外层嵌套标签必须实现UnnamedParametric接口(如TextTag).

该标签的两个属性

  • name (String) - 参数名
  • value (Object) - 参数值

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

<param name="color">blue</param> <-- (A) -->
<param name="color" value="blue"/> <-- (B) -->

(A)中,参数值会以String的格式放入statck. (B)中该值会以java.lang.Object的格式放入statck.
具体请看http://jira.opensymphony.com/browse/WW-808.

参数

名称必填缺省类型描述
namefalse String参数名
valuefalse从stack中evaluated的值Object/Stringvalue表达式
idfalse Object/String引用元素的id

例子

<pre>
<ui:component>
 <ui:param name="key"     value="[0]"/>
 <ui:param name="value"   value="[1]"/>
 <ui:param name="context" value="[2]"/>
</ui:component>
</pre>

这里key作为标识符,value在当前的OgnlValueStack上被当作一个OGNL的表达式来求值获得结果.(原文:where the key will be the identifier and the value the result of an OGNL expression run against the current OgnlValueStack.)

7.push

描述

push值到堆栈中,方便应用.

参数

名称必填缺省类型描述
valuetrue Object/String要push到堆栈中的值
idfalse Object/String该元素标识

例子

<ww:push value="user">
    <ww:propery value="firstName" />
    <ww:propery value="lastName" />
</ww:push>

将user的值push到栈中,从而使property标签的能够获取user的属性(firstName, lastName etc)
<ww:push value="myObject">                              ----- (1)
      <ww:bean name="jp.SomeBean" id="myBean"/>        ----- (2)
		    <ww:param name="myParam" value="top"/>        ----- (3)
      </ww:bean>
</ww:push>

当在 (1) 时, myObject 在栈顶
当在 (2) 时, jp.SomeBean 在栈顶, 也在stack's context中以myBean为键值存在
当在 (3) 时, top得到jp.SomeBean的实例

<ww:push value="myObject">                                       ---(A)
   <ww:bean name="jp.SomeBean" id="myBean"/>                   ---(B)
      <ww:param name="myParam" value="top.mySomeOtherValue"/>  ---(C)
   </ww:bean>
</ww:push>

当在 (A) 时, myObject 在栈顶
当在 (B) 时, jp.SomeBean 在栈顶, 也在stack's context中以myBean为键值存在
当在 (C) 时, top指向jp.SomeBean的实例.所以top.mySomeOtherValue调用SomeBean的 mySomeOtherValue() 方法

<ww:push value="myObject">                                 ---- (i)
   <ww:bean name="jp.SomeBean" id="myBean"/>             ---- (ii)
      <ww:param name="myParam" value="[1].top"/>         -----(iii)
   </ww:bean>
</ww:push>

当在 (i) 时, myObject 在栈顶
当在 (ii) 时, jp.SomeBean 在栈顶, 后面是myObject
当在 (iii) 时, [1].top返回myObject

8.set

描述

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

参数

名称必填缺省类型描述
nametrue String变量的名字
scopefalseactionString变量作用域,可以为application, session, request, page, 或action.
valuefalse Object/String将会赋给变量的值
idfalse Object/String元素标识

例子

<ww:set name="personName" value="person.name"/>
Hello, <ww:property value="#personName"/>. How are you?

9.text

描述

支持国际化信息的标签

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

参数

名称必填缺省类型描述
nametrue Object/String资源属性的名字
namefalse Object/String该元素标识

例子

<!-- First Example -->
<ww:i18n name="webwork.action.test.i18n.Shop">
    <ww:text name="main.title"/>
</ww:i18n>

<!-- Second Example -->
<ww:text name="main.title" />

另外一个例子

<ww:text name="format.money"><ww:param name="value" value="myMoneyValue"/></ww:text>

这里

format.money={0,number,currency}

了解格式化文本的各种情况的文档,请浏览

  1. http://java.sun.com/j2se/1.4.2/docs/api/java/text/MessageFormat.html
  2. http://java.sun.com/docs/books/tutorial/i18n/format/decimalFormat.html

 

10.url

 

描述

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

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

参数

名称必填缺省类型描述
includeParamsfalsegetObject/String值为'none', 'get' 或'all'.
schemefalse Object/Stringscheme属性
valuefalse Object/Stringvalue如果不提供就用当前action
actionfalse Object/String用来生成url的action,如果没有则使用value
namespacefalse Object/String命名空间
methodfalse Object/String使用的action的方法
encodefalsetrueBoolean是否encode参数
includeContextfalsetrueBoolean是否实际的上下文环境应该包含在url中
portletModefalse Object/String结果portlet 的模式(mode)
windowStatefalse Object/String结果portlet窗口的状态
portletUrlTypefalse Object/String指定这时一个 portlet 输出还是一个 action url
anchorfalse Object/StringURL的锚点( anchor)
idfalse Object/String该元素标识

例子

<-- Example 1 -->
<ww:url value="editGadget.action">
    <ww:param name="id" value="%{selected}" />
</ww:url>
<-- Example 2 -->
<ww:url action="editGadget">
    <ww:param name="id" value="%{selected}" />
</ww:url>
<-- Example 3-->
<ww:url includeParams="get"  >
    &lt:param name="id" value="%{'22'}" />
</ww:url>

11.property

描述

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

参数

名称必填缺省类型描述
defaultfalse String如果属性是null则显示的default值
escapefalsetrueBoolean是否escape HTML
valuefalse<top of stack>Objectvalue to be displayed
idfalse Object/String该元素标识

例子

<ww:push value="myBean">
    <!-- Example 1: -->
    <ww:property value="myBeanProperty" />

    <!-- Example 2: -->
    <ww:property value="myBeanProperty" default="a default value" />
</ww:push>

Example 1 显示出myBean's getMyBeanProperty() 的执行结果.
Example 2 显示出myBean's getMyBeanProperty() 的执行结果,如果是null,则显示缺省(default)值.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值