标签:cPage style blog http io ar color os 使用
1. property
2. set
i. 默认为action scope,会将值放入request和ActionContext中
ii. page、request、session、application
3. bean
4. include (对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)
5. param
6. debug
1. if elseif else
2. iterator
i. collections map enumeration iterator array
3. subset
1. theme
i. simple xhtml(默认) css_xhtml ajax
基本不用,直接用Ajax框架
1. $用于i18n和struts配置文件
2. #取得ActionContext的值
3. %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用
i. 参考<s:property 和 <s:include>
说明一点,每一个标签的属性,有的是字符串,有的是Ognl表达式
比如标签property:
如果这个属性是Object类型,就会把属性value里的字符串解析成Ognl表达式
property
实例:
<action name="tags" class="com.bjsxt.struts2.tags.TagsAction"> <result>/tags.jsp</result> </action>
TagsAction:
public class TagsAction extends ActionSupport { private String password; private String username; public TagsAction() { } public String execute() { this.addFieldError("fielderror.test", "wrong!"); return SUCCESS; } public String getPassword() { return password; } public String getUsername() { return username; } public void setPassword(String password) { this.password = password; } public void setUsername(String username) { this.username = username; } }
tags.jsp
<li>property: <s:property value="username"/> </li>
<li>property 取值为字符串: <s:property value="‘username‘"/> </li> <li>property 设定默认值: <s:property value="admin" default="管理员"/> </li> <li>property 设定HTML: <s:property value="‘<hr/>‘" escape="false"/> </li>
set
什么时候会用到set标签
只是做jsp开发的时候很少能用到,但是有时候可以为一个特别长或者特别难写的变量设置别名等,可能会用到
可见id和name都不用设置了,只需要var就行
默认范围:
<li>set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li> <li>set 从request取值: <s:property value="#request.adminName" /></li> <li>set 从ActionContext取值: <s:property value="#adminName" /></li>
设定范围 <li> 范围为page: <s:set name="adminPassword" value="password" scope="page"/></li> <li> 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %> --%> <li> 范围为session: <s:set var="adminPassword" value="password" scope="session"/></li> <li> 从相应范围取值: <s:property value="#session.adminPassword"/> </li>
bean
bean的作用就是生成一个类的对象
<li>bean 定义bean,并使用param来设定新的属性值: <s:bean name="com.bjsxt.struts2.tags.Dog" > <s:param name="name" value="‘pp‘"></s:param> //这个name的属性值,就是Dog类的成员,表示为哪一个成员赋值 <s:property value="name"/> </s:bean> </li>
Dog:
package com.bjsxt.struts2.tags; public class Dog { private String name; public Dog() { } public Dog(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "dog: " + name; } }
当使用bean的时候,就会生出一个对象,并且压到栈顶,在bean标签的内部可以使用这个对象,但是一旦bean标签结束,这个对象就会从栈顶抛出,所以在bean标签外部是访问不到的。(可以用debug标签做测试,在内部可以看到在外部看不到)
但是如果在外部想访问怎么办?
这时候就要使用val属性,把这个对象放在valueContext里面
<li>bean 查看debug情况: <s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog"> <s:param name="name" value="‘oudy‘"></s:param> </s:bean> 拿出值: <s:property value="#myDog.name"/> </li>
Include
尽量少用这个标签,处理中文特别麻烦。
Jsp里面有两个包含文件的方式,<% <? ,用这两种就好,不要用这个标签
<li>include _include1.html 包含静态英文文件 <s:include value="/_include1.html"></s:include> </li> <li>include _include2.html 包含静态中文文件 <s:include value="/_include2.html"></s:include> </li> <li>include _include1.html 包含静态英文文件,说明%用法 <s:set var="incPage" value="‘/_include1.html‘" /> <s:include value="%{#incPage}"></s:include> </li>
include的value值就是一个普通字符串,而不是ognl表达式
在第3个例子中,如果想把incPage从字符串变成ognl表达式
使用%{}
if
<li>if else: age = <s:property value="#parameters.age[0]" /> <br />
<s:if test="#parameters.age[0] < 0">wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
<s:else>yeah!</s:else><br />
<s:if test="#parameters.aaa == null">null</s:if>
</li>
注意,每一个参数都有可能是数组,不管传过来几个值,如果想取第一个值,都要加[0]
valueContext里的parameters指的是点击链接带过来的参数
<a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>
每次都写#parameters.age[0]太麻烦,这时候就看出来set标签的好处了
<s:set var="age" value="#parameters.age[0]" /> <s:if test="#age < 0">wrong age!</s:if>
iterator
就是遍历,理论上可以遍历以下几种集合
collections map enumeration iterator array
ognl表达式里面大括号就是一个集合,默认会转化成list
<li>遍历集合:<br /> <s:iterator value="{1, 2, 3}" > <s:property/> | </s:iterator> </li> <li>自定义变量:<br /> <s:iterator value="{‘aaa‘, ‘bbb‘, ‘ccc‘}" var="x"> <s:property value="#x.toUpperCase()"/> | </s:iterator> </li> <li>使用status:<br /> <s:iterator value="{‘aaa‘, ‘bbb‘, ‘ccc‘}" status="status"> <s:property/> | 遍历过的元素总数:<s:property value="#status.count"/> | 遍历过的元素索引:<s:property value="#status.index"/> | 当前是偶数?:<s:property value="#status.even"/> | 当前是奇数?:<s:property value="#status.odd"/> | 是第一个元素吗?:<s:property value="#status.first"/> | 是最后一个元素吗?:<s:property value="#status.last"/> <br /> </s:iterator> </li>
结果是
Map:
<li> <s:iterator value="#{1:‘a‘, 2:‘b‘, 3:‘c‘}" > <s:property value="key"/> | <s:property value="value"/> <br /> </s:iterator> </li> <li> <s:iterator value="#{1:‘a‘, 2:‘b‘, 3:‘c‘}" var="x"> <s:property value="#x.key"/> | <s:property value="#x.value"/> <br /> </s:iterator> </li>
UI
UI标签用的并不多
主要说一个 theme(主题)
有四种形式
simple xhtml(默认) css_xhtml ajax
主题就像页面皮肤
当我们在视图上写html源码时,在客户端展现出来的是经过处理的,并不是原封不动的源码,不同的theme可以解析成不同的结果
主题有点像抽象工厂,当我们选择一种时就换一种皮肤
我们可以配置自己的主题,也可以在配置文件中换成其他主题
标签:cPage style blog http io ar color os 使用
原文地址:http://www.cnblogs.com/tech-bird/p/4158042.html