首先在jsp页面中引入以下指令,前提是你已经导入了struts2的jar包。
<%@ taglib uri="/struts-tags" prefix="s" %>
1. struts标签
1.1 通用标签
1.1.1 数据标签
property 用于取值,类似于c标签中的c:out标签,(注:struts标签中的value不是按字符串算,而是按表达式算)
a链接跳转到Demo3Action 且传参数
<a href="${pageContext.request.contextPath}/sy/demo3Action.action?sid=1&sname=张三&stu2.sname=李四&stu2.sid=2">struts2标签</a>
后台Action接收参数,然后跳转到demo3.jsp页面
package com.zking.study.three;
import com.opensymphony.xwork2.ModelDriven;
import ognl.OgnlContext;
public class Demo3Action implements ModelDriven<Student>{
private Student student=new Student(); // 实现ModelDriven接口接收参数
private String sname; // get/set方法接收参数
private Student stu2; // 对象导航接收参数
public String execute() {
System.out.println(student+" , "+name+" , "+stu2);
return "demo3";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student getStu2() {
return stu2;
}
public void setStu2(Student stu2) {
this.stu2 = stu2;
}
@Override
public String toString() {
return "Demo3Action [student=" + student + ", name=" + name + ", stu2=" + stu2 + "]";
}
@Override
public Student getModel() {
return student;
}
}
demo3.jsp,
<body>
<!-- 取栈顶,取student(model) -->
<s:property/>
<!-- 取根对象最上面的对象的属性 -->
<s:property value="sid"/>
<!-- 取根对象的stu2对象的sid属性 -->
<s:property value="stu2.sid"/>
<!-- 取非根对象stu2对象的sid属性 -->
<s:property value="#request.stu2.sid"/>
<!-- value不是按字符串算,而是按表达式算,所以‘123456’不会显示出来 -->
<s:property value="123456"/>
</body>
set
<body>
<!-- 通过var去设值的都是放在非根对象里的 -->
<s:set var="test" value="stu2.sid"></s:set>
<s:property value="#test"/>
</body>
action
<body>
<!-- 通常用于请求后台,获取初始化数据的 -->
<s:action name="demo3Action" namespace="/sy" var="test2">
<!-- 带参数则在action标签内加入param标签,param标签数量依实际情况调整 -->
<!-- param有两种赋值方式, 一种为ognl表达式,一种为字符串 -->
<s:param name="a" value="#sname"></s:param> <!-- ognl表达式 -->
<s:param name="a">123</s:param> <!-- 字符串 -->
</s:action>
</body>
url
<body>
<!-- url标签是为了生成地址所用,不会访问后台 -->
<s:url namespace="/sy" action="demo3Action" var="test3">
<!-- 带参数则在action标签内加入param标签,param标签数量依实际情况调整 -->
<!-- param有两种赋值方式, 一种为ognl表达式,一种为字符串 -->
<s:param name="a" value="#sname"></s:param> <!-- ognl表达式 -->
<s:param name="a">123</s:param> <!-- 字符串 -->
</s:url>
<a href='<s:property value="#test3"/>'>xxx</a>
<!-- a标签的href属性是按字符串算的,所以要在字符串外包裹一层%{ },强制转换成OGNL表达式计算 -->
<s:a href="%{#test3}">xxx</s:a>
</body>
debug
标签用于调试值栈,查看其中的值。
<body>
<s:debug/>
</body>
date
<body>
<%
request.setAttribute("datecurrent", new Date());
%>
<s:date name="#request.datecurrent"/>
</body>
1.1.2 控制标签
if
<body>
<%
request.setAttribute("result", 75);
%>
<s:if test="#request.result>90">A</s:if>
<s:elseif test="#request.result>70">B</s:elseif>
<s:elseif test="#request.result>60">C</s:elseif>
<s:else>D</s:else>
</body>
iterator
<body>
<%
request.setAttribute("result", new String[]{'1','2','3'});
%>
<s:iterator var="v" value="#request.result">
<li>
<s:property value="#v"/>
</li>
</s:iterator>
</body>
1.2 UI标签
1.2.1 表单标签
<body>
<s:form action="demo3Action" namespace="/sy">
<s:textfield label="姓名" name="uname"></s:textfield>
<s:radio list="#{1:'男',2:'女'}" label="性别" name="sex" value="2"></s:radio>
<s:select label="时间选择" name="deptName" list="#{1:'昨天',2:'今天',3:'明天'}"></s:select>
<!-- 单选复选框,往后台传值是布尔类型的 -->
<s:checkbox label="是否已婚" name="married" ></s:checkbox>
<s:checkboxlist label="爱好" list="#{1:'篮球',2:'足球',3:'跑步'}" name="hoppy"></s:checkboxlist>
<s:textarea label="备注" name="remark"></s:textarea>
<s:hidden name="xxx" value=""></s:hidden>
</s:form>
</body>