一:通用标签
1:数据标签
①set
②property
③push(弹栈 将需要的值放到栈顶便于页面获取)
④action(重点 通常用来请求后台,获取初始化的数据 有var的一般为非根对象(非根取值要用#))
⑤url(重点 url标签是为了生成地址所用的,注意与a标签区分)
⑥date
⑦param
⑧debug
⑨url/param/a(重要~用来生成url链接的)
2:控制标签
iterator/if/elseif/else
页面取值的两种方式
${test} , ${requestScope.test}
案例
①jsp页面
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>通用标签</title>
</head>
<body>
<h3 style="color: red;">数据标签</h3>
<h3>set</h3>
<!-- value里面放的是ognl的表达式 实际是集合(ognl上下文)的key
在ognl上下文的根对象中取result的值 赋给test1
-->
<s:set var="test1" value="result"></s:set>
${test1 },${requestScope.test1}
<h3>property</h3>
<!--取栈顶 cal1(modelDriven)-->
<s:property/>,
<!-- 取跟对象的最上面的属性num1 -->
<s:property value="num1"/>,
<!--cal2是 TagAction里面的根对象 取跟对象cal2中num属性 -->
<s:property value="cal2.num1"/>
<h3>push</h3>
<s:property/>
<!--弹栈 将需要的值放到栈顶便于页面获取 把result的值即 250谈到栈顶中 -->
<s:push value="result">
<s:property/>
</s:push>
<s:property/>
<h3>重点action</h3>
<!-- action通常用来请求后台,获取初始化的数据 有var的一般为非根对象(非根取值要用#) -->
<s:action name="tagAction" namespace="/sy" var="test2"></s:action>
<s:property value="#test2.cal2"/>
<h3>url</h3>
<!-- url标签是为了生成地址所用的,注意与a标签区分 -->
<s:url namespace="/sy" action="tagAction" var="test3"></s:url>
<s:property value="#test3"/>
<a href='<s:property value="#test3"/>'>xxxxxx</a>
<s:a href="#test3">aaaa></s:a>
<!-- 将其转化为ognl表达式 %{} -->
<s:a href="%{#test3}">bbbb></s:a>
<h3>param</h3>
<!-- 带参数 有两种赋值方式
①:ognl表达式
②:字符串
-->
<s:url namespace="/sy" action="tagAction" var="test4">
<s:param name="test5">aaa</s:param>
<s:param name="test6" value="num1">cccc</s:param>
</s:url>
<s:property value="#test4"/>
<h3>date</h3>
<%
request.setAttribute("currentDate", new Date());
request.setAttribute("score", new Integer(70));
request.setAttribute("names", new String[]{"aa","bb","cc"});
%>
<s:date name="#request.currentDate" format="yyyy-MM-dd"/>
<h3>debug</h3>
<s:debug/>
<h3 style="color: red;">控制标签</h3>
<h3>iterator/if/elseif/else</h3>
<ul>
<s:iterator var="v" value="#request.names">
<li>
<s:property value="#v"/>
</li>
</s:iterator>
</ul>
<s:if test="#request.score>80">
A
</s:if>
<s:elseif test="#request.score>60">
B
</s:elseif>
<s:else>
C
</s:else>
</body>
</html>
②entity
package com.zking.three.web;
import com.opensymphony.xwork2.ModelDriven;
import com.zking.one.entity.Cal;
public class TagAction implements ModelDriven<Cal>{
/**
* 栈底部为 TagAction 里面有 cal2,num1,result 栈顶为ModelDriven对象 cal1
* 压栈是两个栈都为空的 通过前台传值num1=20 先取栈顶 通过反射把num1=20赋给cal
*/
private Cal cal1=new Cal();
private Cal cal2;
private String num1;
private String result;
public String execute() {
System.out.println(cal1);//cal1.getNum1()=20
System.out.println(cal2);//cal2.getNum1()=null
System.out.println(num1);//null=null
return "demo3";
}
public Cal getCal2() {
return cal2;
}
public void setCal2(Cal cal2) {
this.cal2 = cal2;
}
public String getNum1() {
return num1;
}
public void setNum1(String num1) {
this.num1 = num1;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
@Override
public Cal getModel() {
return cal1;
}
}
③struts-sy.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- namespace:在内存中划分具体的控件
name:给package包取个名字 可以继承
-->
<package name="sy" extends="base" namespace="/sy">
<action name="tagAction" class="com.zking.three.web.TagAction">
<result name="demo3">/demo3.jsp</result>
</action>
</package>
</struts>
二:UI标签
1:表单标签
① form
② textfield 文本框
③radio
radio中list的两种赋值方式(必须要写name)
<s:radio name=“sex” list="{‘男’,‘女’ }" label=“性别” value="‘男’"></s:radio>
<%-- <s:radio name=“sex” list="#{1:‘男’,2:‘女’ }" label=“性别” value=“2”></s:radio> --%>
④ select下拉框
⑤ textarea文本域
⑥ hidden隐藏域
⑦checkbox/checkboxlist复选框(传值是boolean类型的)
⑧ submit
demo
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>表单标签</title>
</head>
<body>
crud详细讲解
<h3 style="color: red;">表单标签</h3>
<h3>form</h3>
<h3>textfield</h3>
<h3>radio</h3>
<h3>select</h3>
<h3>textarea</h3>
<h3>hidden</h3>
<h3>submit</h3>
<s:form namespace="" action="">
<s:textfield name="uname" label="姓名"></s:textfield>
<s:radio name="sex" list="{'男','女' }" label="性别" value="'男'"></s:radio>
<%-- <s:radio name="sex" list="#{1:'男',2:'女' }" label="性别" value="2"></s:radio> --%>
<s:select name="deptName" list="#{1:'财务部',2:'后勤部',3:'人事部' }" label="部门选择" />
<!-- 单选复选框,往后台传值是传boolean类型 -->
<s:checkbox name="married" label="是否已婚"/>
<s:checkboxlist name="hobby" label="爱好" list="#{1:'篮球',2:'攀岩',3:'时尚' }"></s:checkboxlist>
<s:textarea name="remark" label="个人简介"/>
<s:hidden name="xxx" value="曾经的我们是那么的单纯"/>
</s:form>
</body>
</html>
三:标签的属性类型说明
String 字符串
Boolean true|false
Object
Object/String 传过去字符串,但会被认为是一个 OGNL表达式进行计算
%{str}:str会被强制转换成OGNL表达式计算
<s:a href="%{#url1}">bbb</s:a>
标签的公共属性
var 将值保存到上下文(ActionContext)中的一个key