初识Struts2_常用标签
一、struts.xml
1 <!-- 修改ui标签所用的主题 --> 2 <constant name="struts.ui.theme" value="simple"></constant> 3 <package name="default" namespace="/" extends="struts-default"> 4 <!-- 5 访问的url: 6 http://localhost:8080/Struts2_Tags/user?username=Tom&age=9 7 --> 8 <action name="user" class="cn.su.action.UserAction"> 9 <result>/tags.jsp</result> 10 </action> 11 </package>
二、Action
1 package cn.su.action; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class UserAction extends ActionSupport { 6 private String username; 7 public String execute(){ 8 this.addFieldError("name", "name is error"); 9 return SUCCESS; 10 } 11 public String getUsername() { 12 return username; 13 } 14 public void setUsername(String username) { 15 this.username = username; 16 } 17 18 }
三、jsp页面bean标签创建对象用到的User类
package cn.su.domain;
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
四、include标签包含用到的文件
01.html
1 <html> 2 <head> 3 <title>html</title> 4 </head> 5 <body> 6 en 7 </body> 8 </html>
02.html
1 <html> 2 <head> 3 <title>html</title> 4 </head> 5 <body> 6 中文 7 </body> 8 </html>
四、jsp页面
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s" %> 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 6 %> 7 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 9 <html> 10 <head> 11 <base href="<%=basePath%>"> 12 13 <title>My JSP 'index.jsp' starting page</title> 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 </head> 23 24 <body> 25 <%--在jsp页面中 html 注释无用 --%> 26 <ol> 27 <li>property:<s:property value="username"/> </li> 28 <li>property:取值为字符串:<s:property value="'Tom'"/> </li> 29 <li>property:设定默认值:<s:property value="xxx" default="Tom"/> </li> 30 <!-- 31 escape 属性表示 HTML 字符串是否原样输出 32 --> 33 <li>property 设定HTML:<s:property value="'<hr/>'" escape="true" /> </li> 34 <hr /> 35 <!-- 36 当不设置set的scope时,set的scope默认为action 37 默认存储在:request和 ActionContext中 38 --> 39 <li>set:设定name值为Jack<s:set var="name" value="'Jack'" /> </li> 40 <li>set:从request中取值 <s:property value="#request.name"/> </li> 41 <li>set:从actionContext中取值 <s:property value="name"/> </li> 42 <!-- 43 当指定set的scope为session时 44 数据只会存储在session中 45 --> 46 <li>set:设定password值为123456<s:set var="password" value="'123456'" scope="session" /> </li> 47 <li>set:从session中取出password: <s:property value="#session.password"></s:property> | <s:property value="#password"></s:property> </li> 48 <hr /> 49 <li> 50 <!-- 当不指定bean标签的var属性时 51 到结束标签/s:bean时 52 这个对象已经从栈顶移除 53 --> 54 使用bean标签来创建对象Ross 55 <s:bean name="cn.su.domain.User"> 56 <s:param name="name" value="Ross"></s:param> 57 <s:property value="name"/> 58 </s:bean> 59 </li> 60 <li> 61 <!-- 当指定var属性时 62 创建的对象什么会被放置在 Actioncontext中 63 --> 64 使用bean标签来创建对象Mary 65 <s:bean name="cn.su.domain.User" var="mary"> 66 <s:param name="name" value="'Mary'"></s:param> 67 <s:property value="#mary.name"/> 68 </s:bean> 69 <s:property value="#mary.name"/> 70 </li> 71 <hr /> 72 <li>include标签包含文件01.html 73 <s:include value="01.html"></s:include> 74 </li> 75 <li>include标签包含文件02.html 76 <s:include value="02.html"></s:include> 77 </li> 78 <li>include标签包含文件01.html 79 <s:set var="path" value="'01.html'"></s:set> 80 <s:include value="%{#path}"></s:include> 81 <%-- 82 ${}的作用: 83 本来s:include的value属性是string类型的 84 不会被当作ongl表达式解析,但当使用%{}时{} 85 里的内容就会强制被当做ognl表达式解析 86 --%> 87 </li> 88 <hr/> 89 <li>if elseif else标签的使用 90 <!-- 取参数age时后面一定要加[0]--> 91 <s:set var="age" value="#parameters.age[0]"></s:set> 92 <s:if test="#age < 0">age is error</s:if> 93 <s:elseif test="#age < 20 ">to yang</s:elseif> 94 <s:else>age is ok</s:else> 95 </li> 96 <hr/> 97 <li>遍历集合 98 <%--每次遍历时都会将当前元素放在栈顶 99 使用<s:property/>不指定value 100 默认取出栈顶对象 101 --%> 102 <s:iterator value="{1,2,3}"> 103 <s:property/> 104 </s:iterator> 105 </li> 106 <li>遍历集合 107 <%--指定var时 108 每次遍历时会将元素放在栈顶和actionContext中 109 --%> 110 <s:iterator value="{1,2,3}" var="i"> 111 <s:property value="#i"/> 112 </s:iterator> 113 </li> 114 <li>status的使用 115 <br/> 116 <s:iterator value="{1,2,3}" status="status"> 117 元素值:<s:property/>| 118 遍历过的元素个数:<s:property value="#status.count"/>| 119 遍历过的元素索引:<s:property value="#status.index"/>| 120 当前是偶数:<s:property value="#status.even"/>| 121 当前是奇数:<s:property value="#status.odd"/>| 122 是第一个元素?:<s:property value="#status.first"/>| 123 是最后一个元素?:<s:property value="#status.last"/> 124 <br/> 125 126 </s:iterator> 127 </li> 128 <li>遍历Map 129 <%--创建 map数组时 大括号前要加# --%> 130 <s:iterator value="#{'1':'a','2':'b','3':'c'}"> 131 <s:property value="key" /> : <s:property value="value" />, 132 </s:iterator> 133 </li> 134 <li>遍历Map 135 <%-- 136 每次遍历时 137 除了把当前元素放在栈顶,还放在ActionContext中 138 --%> 139 <s:iterator value="#{'1':'a','2':'b','3':'c'}" var="x"> 140 <s:property value="#x.key" /> : <s:property value="#x.value" />, 141 </s:iterator> 142 </li> 143 <li>遍历Map 144 <s:iterator value="#{'1':'a','2':'b','3':'c'}"> 145 <s:property value="key" /> | <s:property value="value" /> 146 </s:iterator> 147 </li> 148 <s:debug></s:debug> 149 <hr/> 150 <%-- 151 当使用<s:fielderror>取值时,struts会默认加上<li>标签, 152 即使设置 theme 为 simple 也没用 153 154 --%> 155 <li> <s:fielderror name="name"></s:fielderror></li> 156 </ol> 157 158 </body> 159 </html>