Struts 2 标签
- s:property > 和 ognl 表达式在jsp页面获取值栈数据
- s:iterator > 获取list集合,并且遍历
- s:debug > 查看值栈的标签
表单标签
html 标签
* form 标签: **action** | **method** | **enctype** |
* 输入项 input :
* text > 文本
* password > 密码
* redio > 单选按钮
* checkbox > 复选按钮
* hidden > 隐藏项
* file > 文件上传
* button > 普通按钮
* submit > 提交按钮
* image > 图片提交
* reset > 重置
* selsect > 下拉输入项
* textarea > 文本域
Struts 标签
代码
<s:form>
<!-- 普通输入框 -->
<s:textfield name="uname" label="姓名"></s:textfield>
<!-- 密码输入框 -->
<s:password name="password" label="密码"></s:password>
<!-- 单选输入框 1 -->
<s:radio name="sex1" list="{'男','女'}" label="性别"></s:radio>
<!-- 单选输入框 2 -->
<s:radio name="sex2" list="#{'nan':'男','nv':'女'}" label="性别"></s:radio>
<!-- 复选框 -->
<s:checkboxlist name="college" list="{'幼儿园','小学','中学'}" label="学历"></s:checkboxlist>
<!-- 下拉菜单 -->
<s:select name="love" list="{'吃饭','运动','瑜伽'}" label="爱好"></s:select>
</s:form>
展示样式
问题 :
表单加上简单属性主题后
布局就会很奇怪
<s:form theme="simple">
控制标签
if和else
- 用于控制选择输出的标签
test=''表达式''
<!-- 如果 -->
<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>
iterator
- 这是一个迭代器.
- 可选 :
value="指定集合"
如果没有指定集合,默认为ValueStack栈顶的集合- 可选 :
var="集合元素ID"
- 可选 :
status="指定名称"
通过该指定名称获取相关参数 *int getCount();
返回当前迭代了几个元素 *int getIndex();
返回当前迭代的索引 *boolean isEven();
返回索引是否为偶数 *
boolean isFirst();
返回是否为第一个元素 *boolean isLast();
返回当前是否为最后一个元素 *
boolean isOdd();
返回是否为奇数调用示例:
#指定名称.odd
<!-- List集合例子 -->
<s:iterator value="{'雷鸣','韦康','中之一'}" var="name" status="par">
<!-- 返回当前索引 -->
<s:property value="#par.index"/>
<!-- 返回当前值 -->
<s:property value="name"/>
</s:iterator>
<!-- Map集合例子 -->
<s:iterator value="#{'学号1':'雷鸣','学号2':'韦康','学号3':'中之一'}" status="par">
<!-- 返回当前索引 -->
<s:property value="par.index"/>
<!-- 返回当前key值 -->
<s:property value="key'"/>
<!-- 返回当前value值 -->
<s:property value="value'"/>
</s:iterator>
sort
- 对集合进行排序
subset
- 截取集合的部分元素,形成新的集合;
- 可选
count
指定子集合中的元素数量,默认为源集合的数量;- 可选
source
(英语意思:源头)指定源集合- 可选
start
从第几个元素开始截取,默认为0;- 可选
decider
指定有开发者自己决定是否选中钙元素;- 可选
var
如果指定了该属性,则将生成的Iterator对象设置为page范围的属性
merger
- 将多个集合合并为一个集合
如果有两个列表A和B的值,A1,A2和B1,B2。合并列表,会给出A1,B1,A2,B2。
<!-- 声明合并的标签 -->
<s:merge var="myMergedIterator">
<!-- 声明内容 -->
<s:param value="%{myList1}" />
<s:param value="%{myList2}" />
<s:param value="%{myList3}" />
</s:merge>
<!-- 迭代新的集合 -->
<s:iterator value="%{#myMergedIterator}">
<s:property />
</s:iterator>
append
- 将多个集合合并为一个集合
var="新集合名称"
确定一个新的集合名称<s:param value="需要合并的集合名称">
声明需要合并的名称
如果有两个列表A和B的值A1,A2和B1,B2。合并列表,会给你的A1,A2,B1,B2,而append 名单,会有A1,A2,B1,B2。
<s:append var="myAppendIterator">
<s:param value="%{myList1}" />
<s:param value="%{myList2}" />
<s:param value="%{myList3}" />
</s:append>
<s:iterator value="%{#myAppendIterator}">
<s:property />
</s:iterator>
generator
- 将指定字符串按照指定分隔符,生成一个集合
- 可选
count
该属性指定元素总数- 必填
separator
指定分隔符(英语意思:分割器)- 必填
val
指定被解析的字符串- 可选
var
指定生成对象名,并且会放入StackContext中
<!-- 创建数组 -->
<s:generator val="%{'Violet,Indigo,Blue,
Green,Yellow,Orange,Red '}" count="7"
separator=",">
<!-- 迭代 -->
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>
数据标签
- 数据标签主要用于提供各种数据访问相关的功能,包含显示一个Action里的属性,以及生成国际化输出等功能
action
- 该标签用于在jsp页面直接调用一个Action,通过制定的executeResult参数,还可以将该Action的处理结果包含到本页面中来.
- 可选
var
一旦定义了,该Action将会被放入StackContext中- 必填
name
通过指定该标签调用哪个Action- 可选
namespace
该属性指定该标签调用哪个Action 坐在的那么namespace- 可选
executeResult
指定该属性是否要将Action的处理返回到本页面,默认为false,即不包含.- 可选
ignoreContextParams
指定该页面中的请求参数是否需要转入调用的Action.默认为false , 即将本页面的请求参数传入被调用的Action.
下面调用第一个Action并将结果包含到本页面中<br/>
<s:action name="tag1" executeResult="true"/>
<hr/>
下面调用第二个Action,并将结果包含到本页中.<br/>
<s:action name="tag2" executeResult="true"/>
<hr/>
下面调用第三个Action,不将结果包含到本页<br/>
<s:action name="tag2" executeResult="false"/>
bean
- 该标签用于创建一个JavaBean实例.可以在该标签体内使用
<param.../>
标签为该JavaBean实例传入属性.
- 必填
name
该属性指定实例化的JavaBean的实现类. - 可选
var
如果指定了该属性,则该JavaBean实例会被存放到StackContext中,的requestScope中.
创建实例
- 必填
public class Person{
private String name;
private int age;
...(setter和getter方法)...
}
标签创建实例 **1**
<!-- 使用bean标签创建一个Person类的实例 -->
<s:bean name="com.bean.Person">
<!-- 使用param标签为Person实例传入参数 -->
<s:param name="name" value="雷鸣"/>
<s:param name="age" value="26"/>
<!-- 因为在bean标签内,Person实例位于ValueStack的栈顶,所以可以直接访问 -->
Person实例的name为:<s:property value="name"/><br/>
Person实例的age为:<s:property value="age"/>
</s:bean>
**2**
<!-- 使用bean标签创建一个Person类的实例,为其制定var -->
<s:bean name="com.bean.Person">
<!-- 使用param标签为Person实例传入参数 -->
<s:param name="name" value="雷鸣"/>
<s:param name="age" value="26"/>
<!-- 因为在bean标签内,Person实例位于ValueStack的栈顶,所以可以直接访问 -->
Person实例的name为:<s:property value="name"/><br/>
Person实例的age为:<s:property value="age"/>
</s:bean>
date
- 用于格式化输出一个日期
- 可选
format
: 根据该属性指定的格式来格式化日期 - 可选
nice
: true = 输出时差 \ false(默认) = 不输出时差 - 必填
name
: 指定要输出的日期值 - 可选
var
: 声明名称并放入 requestScope中
bebug
- 用于在页面生成一个调试连接,点击链接显示ValueStack 和 StackContext的内容
- 主要用于辅助调试
i18n
- 用于指定国际化资源文件的baseName
include
- 用于在jsp页面中包含其他的jsp或servlet资源
- 必填
value
: 指定被包含的页面
param
- 用于设置一个参数,通常是用作bean标签 url标签的子标签
- 可选
name
: 指定那个需要设置参数的参数名 - 可选
value
: 指定需要修改的参数值
push
- 用于将某个值放入ValueStack的栈顶
- 必填
value
: 指定放到栈顶的值
<s:push>
<s:property value="name"/>
<s:property value="age"/>
</s:push>
set
- 用于设置一个新的变量,并放入指定的位置
- 可选
scope
: 指定新变量的存放范围application
session
request
page
action
- 可选
value
: 指定将赋给变量的值,如果没有则自动将ValueStack的栈顶值赋给新变量 - 可选
var
: 如果指定了该属性,则会放入ValueStack中
text
- 用于输出国际化信息
url
- 用于生成一个url
- 可选
action
指定生成的URL地址为那个action,如果不提供则为value的值 - 可选
anchor
指定URL的锚点 - 可选
encode
指定是否需要对参数进行编码,默认为true - 可选
escapeAmp
指定是否需要对&符号进行编码,默认为true - 可选
forceAddSchemeHostAndPort
指定是否需要在URL的地址强制添加scheme 主机 和 端口. - 可选
includeContext
指定是否需要对当前上下文包含到URL地址中 - 可选
includeParams
指定是否包含请求参数,该属性只能为none
|get
|all
默认为get
- 可选
method
指定action的方法 - 可选
namespace
指定命名空间 - 可选
portletMode
指定结果页面的portlet模式 - 可选
scheme
这是scheme属性 - 可选
value
指定生成URL的地址 - 可选
var
指定了该属性,则会把连接值直接放入ValueStack中 - 可选
windowState
指定结果页面的portlet窗口状态
property
- 用于输出某个值,包括ValueStack StackContext 和 ActionContext中的值
- 可选
default
如果输出值为null
则输出该属性的值 - 可选
escape
指定是否是escapeHTML代码 默认为true - 可选
value
指定需要输出的属性值,如果没有该属性,默认输出ValueStack栈顶的值