一、OGNL(.、#、$、%)表达式
在Struts 2框架中,值栈(Value Stack)就是OGNL的根对象。如果用户需要访问值栈中的对象,则可以通过如下代码访问值栈中的属性:${foo} // 获得值栈中的foo属性如果访问其他Context中的对象,由于不是根对象,在访问时需要加#前缀。application对象:用来访问ServletContext,如#application.userName或者#application [“userName”]相当于调用Servlet的getAttribute("userName")。session对象:用来访问HttpSession,如#session.userName或者#session[“userName”]相当于调用session.getAttribute("userName")。request对象:用来访问HttpServletRequest属性的Map,如#request.userName或者#request[“userName”]相当于调用request.getAttribute("userName")。在类中:Map request=(Map)ActionContext.getContext().get("request");request.put("name",getName());就是先得到request对象,然后把值放进去。在JSP页面中:<s:property value="#request.name"/>,其中#request.name相当于调用了request.getAttribute(“name”);二、数据标签
1. <s:property>标签property标签的作用是输出指定值。value:指定需要输出的属性值,如果没有指定该属性,则默认输出值栈栈顶的值。例如:<s:property value="#request.name"/>2. <s:set>标签name:该属性是必选的,重新生成新变量的名字。例如:<s:property value="#session['user'].username"/><s:property value="#session['user'].age"/><s:property value="#session['user'].address"/>等价于:<s:set name="user" value="#session[‘user'] " /><s:property value="#user.username"/><s:property value="#user.age" /><s:property value="#user.address" />3. <s:param>标签param标签主要用于为其他标签提供参数,该标签有如下几个属性:name:该属性是可选的,指定需要设置参数的参数名。value:该属性是可选的,指定需要设置参数的参数值。id:该属性是可选的,指定引用该元素的id。4. <s:bean>标签name:该属性是必选的,用来指定要实例化的JavaBean的实现类。id:该属性是可选的,如果指定了该属性,则该JavaBean实例会被放入StackContext中,从而可通过id属性来访问该JavaBean实例。例如:有一个Student类,该类中有name属性,并有其getter和setter方法:类中:public class Student { ?private String name;?public String getName() { return name;?}?public void setName(String name) {?this.name=name;?}}JSP页面中:<s:bean name="Student">?<s:param name="name" value="'zhangsan'"/><s:property value="name"/></s:bean>或:<s:bean name="Student" id="s" ><s:param name="name" value="'zhangsan'"/></s:bean><s:property value="#s.name"/>5. <s:action>标签使用action标签可以允许在JSP页面中直接调用Action。name:该属性是必选的,指定该标签调用哪个Action。6. <s:date>标签date标签主要用于格式化输出一个日期。该标签有如下属性:format:该属性是可选的,如果指定了该属性,将根据该属性指定的格式来格式化日期。nice:该属性是可选的,指定是否输出指定日期和当前时刻之间的时差。默认为false。name:属性是必选的,指定要格式化的日期值。其用法为:<s:date name="指定日期取值" format="日期格式"/><!-- 按指定日期格式输出 --><s:date name="指定日期取值" nice="true"/><!-- 输出时间差 --><s:date name="指定日期取值"/><!—默认格式输出-->7. <s:include>标签include标签用于将一个JSP页面或一个Servlet包含到本页面中。value:该属性是必选的,指定需要被包含的JSP页面或Servlet。例如:<s:include value="JSP或Servlet文件" id="自定义名称"/>三、控制标签
1. <s:if>/<s:elseif>/<s:else>标签只有if标签可以单独使用,if标签可以与多个elseif标签结合使用,但只能与一个else标签使用。其用法格式如下:<s:if test="表达式">?标签体</s:if><s:elseif test="表达式">标签体</s:elseif><!--允许出现多次elseif标签-->...<s:else>标签体</s:else>2. <s:iterator>标签该标签主要用于对集合进行迭代,这里的集合包含List、Set,也可以对Map类型的对象进行迭代输出。该标签的属性如下:value:该属性是可选的,指定被迭代的集合,被迭代的集合通常都由OGNL表达式指定。如果没有指定该属性,则使用值栈栈顶的集合。status:该属性是可选的,指定迭代时的IteratorStatus实例,通过该实例可判断当前迭代元素的属性。例如:<%@ page language="java" pageEncoding="utf-8"%>< uri="/struts-tags" prefix="s" %><html><head><title>控制标签</title></head><body><table border="1" width="200"><s:iterator value="{'apple','orange','pear','banana'}" id="fruit" status="st"><tr <s:if test="#st.even"></s:if>><td><s:property value="fruit"/></td></tr></s:iterator></table></body></html>3. <s:append>标签例如:<body><s:append id="newList"><s:param value="{'apple','orange','pear','banana'}"/><s:param value="{'chinese','english','french'}"/></s:append><table border="1" width="200"><s:iterator value="#newList" id="fruit" status="st"><tr <s:if test="#st.even"></s:if>><td><s:property value="fruit"/></td></tr></s:iterator></table></body>4.<s:merge>标签与append标签作用相似,只是它们所拼接产生的新集合元素顺序不同,其中merge是每次分别在每一个集合取一个元素进行拼接。四、表单标签
1. <s:checkboxlist>标签<s:checkboxlist label="请选择你喜欢的水果" list="{'apple','oranger','pear','banana'}" name="fruit"></s:checkboxlist>或者为:<s:checkboxlist label="请选择你喜欢的水果" list="#{1:'apple',2:'oranger',3:'pear',4:'banana'}" name="fruit"></s:checkboxlist>2. <s:combobox>标签<s:combobox label="请选择你喜欢的水果" list="{'apple','oranger','pear','banana'}" name="fruit"></s:combobox>3. <s:datetimepicker>标签<s:form action="" method="">?<s:datetimepicker name="date" label="请选择日期"></s:datetimepicker></s:form>4. <s:select>标签<s:select list="{'apple','oranger','pear','banana'}"label="请选择你喜欢的水果"></s:select>或者为:<s:select list="fruit" list="#{1:'apple',2:'oranger',3:'pear',4:'banana'}"listKey="key" listValue="value"></s:select>5. <s:radio>标签<s:radio label="性别" list="{'男','女'}" name="sex"></s:radio>或者为:<s:radio label="性别" list="#{1:'男',0:'女'}" name="sex"></s:radio><