Struts2可以将所有标签分成如下3类:–UI(User Interface,用户界面)标签:主要用于生成HTML元素的标签。
–非UI标签:主要用于数据访问、逻辑控制等的标签。
–Ajax标签:用于Ajax(Asynchronous JavaScript And XML)支持的标签。Struts 2的OGNL表达式
?Struts 2利用内建的OGNL(Object Graph Navigation Language)表达式语言支持,大大加强了Struts2的数据访问功能,XWork在原有的OGNL的基础上,增加了对ValueStack的支持。
?OGNL表达式本质上就是表达式语言,和JSP 2的EL本质一样,只是OGNL表达式语言功能更强大
if:用于控制选择输出的标签。
?elseIf/elseif:与if标签结合使用,用于控制选择输出的标签。
?else:与if标签结合使用,用于控制选择输出的标签。
?append:用于将多个集合拼接成一个新的集合。
?generator:它是一个字符串解析器,用于将一个字符串解析成一个集合。
iterator:这是一个迭代器,用于将集合迭代输出。
?merge:用于将多个集合拼接成一个新的集合。但与append的拼接方式有所不同。
?sort:这个标签用于对集合进行排序。
?subset:这个标签用于截取集合的部分元素,形成新的子集合。
?action:该标签用于在JSP页面直接调用一个Action,通过指定executeResult参数,还可将该Action的处理结果包含到本页面中来。
?bean:该标签用于创建一个JavaBean实例。如果指定了var属性,则可以将创建的JavaBean实例放入Stack Context中。
?date:用于格式化输出一个日期。
?debug:用于在页面上生成一个调试链接,当单击该链接时,可以看到当前ValueStack和Stack Context中的内容。
?i18n:用于指定国际化资源文件的baseName。
include:用于在JSP页面中包含其他的JSP或Servlet资源。
?param:用于设置一个参数,通常是用做bean标签、url标签的子标签。
?push:用于将某个值放入ValueStack的栈顶。
?set:用于设置一个新变量,并可以将新变量放入指定的范围内。
?text:用于输出国际化消息。
?url:用于生成一个URL地址。
?property:用于输出某个值,包括输出ValueStack、Stack Context和Action Context中的值。
(1)通过设定特定UI标签上的theme属性来指定主题。
(2)通过设定特定UI标签外围的Form标签的theme 属性来指定主题。
(3)通过取得page会话范围内以theme为名称的属性来确定主题。
(4)通过取得request会话范围内的命名为theme的属性来确定主题。
(5)通过取得session会话范围内的命名为theme的属性来确定主题。
(6)通过取得application会话范围内的命名为theme的属性来确定主题。
(7)通过设置名为struts.ui.theme的常量(默认值是xhtml)来确定默认主题,该常量可以在struts.properties文件或者struts.xml文件中确定。
在form中有两个按钮如何来处理:
<tr>
<td><input type="submit" value="登录"/></td>
<td><input type="submit" value="注册"
οnclick="regist();"/></td>
</tr>
<script type="text/javascript">
function regist()
{
//获取页面的第一个表单
targetForm = document.forms[0];
//动态修改表单的action属性
targetForm.action = "login!regist";
}
</script>
在struts中如何来处理这中请求:
public class LoginRegistAction
extends ActionSupport
{
//封装用户请求参数的两个属性
private String username;
private String password;
//封装处理结果的tip属性
private String tip;
//username属性对应的setter和getter方法
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
//password属性对应的getter和setter方法
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
//tip属性对应的setter和getter方法
public String getTip()
{
return tip;
}
public void setTip(String tip)
{
this.tip = tip;
}
//Action包含的注册控制逻辑
public String regist() throws Exception
{
ActionContext.getContext().getSession()
.put("user" , getUsername());
setTip("恭喜您," + getUsername() + ",您已经注册成功!");
return SUCCESS;
}
//Action默认包含的控制逻辑
public String execute() throws Exception
{
if (getUsername().equals("a")
&& getPassword().equals("1") )
{
ActionContext.getContext().getSession()
.put("user" , getUsername());
setTip("欢迎," + getUsername() + ",您已经登录成功!");
return SUCCESS;
}
else
{
return ERROR;
}
}
}
指定method属性及使用通配符
<struts>
<package name="lee" extends="struts-default">
<!-- 使用模式字符串定义Action的name,指定所有以Action结尾的请求,
都可用LoginRegistAction来处理,method属性使用{1},
这个{1}代表进行模式匹配时第一个*所代替的字符串 -->
<action name="*Action" class="org.crazyit.app.action.LoginRegistAction"
method="{1}">
<!-- 定义逻辑视图和物理视图之间的映射关系 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
页面的跳转问题
<result name="success" type="redirecAction">
redirecAction(重定向) dispatcher
注释的应用:
/**
* Description:
* <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
* <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee kongyeeku@163.com
* @version 1.0
*/
OGNL表达式语言
<%@taglib prefix="s" uri="/struts-tags"%>
<s:set name="age" value="29"/>
<s:if test="#age>60">
老年人
</s:if>
<s:elseif test="#age>35">
中年人
</s:elseif>
<s:elseif test="#age>15">
青年人
</s:elseif>
<s:else>
少年
</s:else>
Iterator 标签
<!-- 迭代输出List集合 -->
<s:iterator value="{'疯狂Java讲义',
'轻量级Java EE企业应用实战',
'经典Java EE企业应用实战'}"
id="name" status="st">
<tr <s:if test="#st.odd">
style="background-color:#bbbbbb"</s:if>>
<td><s:property value="name"/></td>
</tr>
</s:iterator>
<!-- 对指定的Map对象进行迭代输出,并指定status属性 -->
<s:iterator value="#{'疯狂Java讲义':'李刚',
'轻量级Java EE企业应用实战':'李刚' ,
'经典Java EE企业应用实战':'李刚'}"
id="score" status="st">
<!-- 根据当前被迭代元素的索引是否为奇数来决定是否使用背景色 -->
<tr <s:if test="#st.odd">
style="background-color:#bbbbbb"</s:if>>
<!-- 输出Map对象里Entry的key -->
<td><s:property value="key"/></td>
<!-- 输出Map对象里Entry的value -->
<td><s:property value="value"/></td>
</tr>
</s:iterator>