一、property标签重点内容
property表签用于输出一个值栈中德智
1、如何查看当前web应用中的值栈呢,可以在jsp页面中加上这个标签对,启动服务器,点击debug按钮就可以显示当前web应用的值栈
2、常用的属属性和值列举如下表:
名字 类型 默认值 说明
default String 可选,如果值为null或者没有给定,将显示该属性值
escape boolean true 可选,是否要对html特殊字符进行转义
value String 来自栈顶对象 将要显示的值
3、示例
1)输出Action属性customerId的值
2)输出session属性userName 的值
<s:property value=“#session.userName”/>
3)如果value属性没有给出,Value属性没有给出,ValueStack值栈栈顶对象的值被输出。
4) 对于Map SessionMap requestMap的属性值。
5)对于请求参数的获取可以通过parameters对象进行获取(例如下边是获取第一个参数,因为参数的属性是一个数组形式)
<s:property value="#parameters.name[0]"/>
<s:property value="#session.date"/>
二、url创建一个url字符串
形式如下
s:property :打印值栈中的属性值的:对于值栈中对应的属性值
<br>
<s:property value="productDesc"/>
<br>
对于Map SessionMap requestMap的属性值。
<br>
<s:property value="#parameters.name[0]"/>
<s:property value="#session.date"/>
<br>
s:jurl创建一个url字符串的
<br>
<br>
<s:url value="/getProduct" var="url" >
<!-- 指定url包含的参数,2002不可能是一个属性名,struts2把2002直接作为属性值。-->
<s:param name="productId" value="2002"></s:param>
</s:url>
url:${url }
<!-- 显示的内容形式如下
/strut2-4/getProduct?productId=2002 -->
<br>
<br>
<s:url value="/getProduct" var="url2">
<!-- 对于value值。会对value进行ognl解析。 相当于ognl认为它是一个属性名字而不是值,因此输出的是1001-->
<s:param name="productId" value="productId"></s:param>
</s:url>
url2:${url2 }
<!-- 显示内容如下
url2:/strut2-4/getProduct?productId=1001 -->
<br>
<br>
<s:url value="/getProduct" var="url3">
<!--若不希望尽进行ognl解析,则进行单引号进行括起来 -->
<s:param name="productId" value="'abcdef'"></s:param>
</s:url>
url3:${url3 }
<!-- 显示内容如下
url3:/strut2-4/getProduct?productId=abcdef
-->
<br>
<br>
<!-- 构建一个请求action的地址 -->
<s:url action="testAction" namespace="/helloword" method="save" var="url4">
</s:url>
url4:${url4 }
<!-- 显示内容如下
url4:/strut2-4/helloword/testAction!save.action -->
<br>
<br>
<!-- -->
s:url var url5 includeParameters="all"
<s:url value="testUrl" var="url5" includeParams="all"></s:url>
url5:${url5 }
<!-- 结果如下
url5:testUrl?name=pdsu -->
<!-- 注意上边这个形式如果includeParams的值为get只能获取get方式的请求参数形式,对于post的请求参数形式不适用
如果其值为all那么对于post请求和get请求都使用 -->
三、set标签
1)s:set:向page,request,session,application域对象中加入一个属性值。
<!-- 对value属性值夜自动进行ognl解析,所以我们可以不让其进行解 析 -->
<s:set name="productName" value="'ab'" scope="request"></s:set>
<br>
<!-- 将放入的productName1取出.此时一定要确保在action类中要有productDesc属性 -->
productName1:${requestScope.productName }
拓展:其他相关域对象的使用方法和此基本上完全相同,可以进行实际应用
四、push标签
s:push:把一个对象在标签开始后压入到值栈中,标签结束时,弹出值栈
<%
Person p=new Person();
p.setName(“weidianlu”);
p.setAge(15);
request.setAttribute(“p”, p);
%>
<s:push value="#request.p">
${name }//此时可以显示栈里的p对象的name属性
</s:push>
<br>
标签结束后${name }
<!-- 标签结束后没有效果 -->
<br>
**五、if标签**
<s:if test="productPrice>1000">
I7处理器 //其中productPrice是Action类的一个属性
</s:if>
<s:if test="productPrice>100">
I5处理器
</s:if>
<s:else>
不存在
</s:else>
<br>
<br>
<%
Person p=new Person();
p.setName("weidianlu");
p.setAge(15);
request.setAttribute("p", p);
%>
<s:if test="#request.p.age>10">
大于十岁
</s:if>
<s:if test="#request.p.age>14">
大于十四岁
</s:if>
<s:else>
不满足要求
</s:else>
<!-- 显示结果为
大于十岁 大于十四岁 -->
六、iteration标签
s:iterator 便利集合的,把这个可便利对象里的每一个元素一次压入和弹出
<%
List listp=new ArrayList();
listp.add(new Person(“AA”,10));
listp.add(new Person(“BB”,15));
listp.add(new Person(“CC”,25));
listp.add(new Person(“DD”,28));
listp.add(new Person(“EE”,36));
listp.add(new Person(“FF”,41));
listp.add(new Person(“GG”,42));
request.setAttribute(“listp”,listp);
%>
开始遍历域对象的属性的对象中的集合
name
{age }
//总结:
2.Struts2自动把Action对象放入值栈中,
1)放入的时间点为:Struts2终将调用Action类的相关方法。在调用该方法之前,
–〉先创建一个StrutsActionProxy对象,
–>再创建StrutsActionProxy之后,把Action对象放入到了值栈中
最后在许多情况下jsp中EL表达式可以提供更简洁的语法。