1、配置struts.xml
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="p1" extends="struts-default">
<action name="demo1" class="com.itstar.action.Demo1Action"
method="demo1">
<result name="success">demo1.jsp</result>
</action>
<action name="demo2" class="com.itstar.action.Demo2Action"
method="demo2">
<result name="success">demo2.jsp</result>
</action>
</package>
</struts>
2、Demo1Action代碼
package com.itstar.action;
import com.opensymphony.xwork2.ActionSupport;
public class Demo1Action extends ActionSupport {
private String username = “小明”;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String demo1() {
return SUCCESS;
}
}
2、Demo1Action代碼
package com.itstar.action;
import com.opensymphony.xwork2.ActionSupport;
import freemarker.core.ReturnInstruction.Return;
public class Demo2Action extends ActionSupport{
public String demo2() {
return SUCCESS;
}
}
注:可以jsp頁面加入<s:debug/>
方便查看(開發結束記得去除)
示例:
<!-- 引入-->
<%@ taglib uri="/struts-tags" prefix="s"%>
<!-- property:輸出數據到頁面。 -->
<s:property value="name" />
<br />
<!-- value不寫:取棧頂對象 -->
<s:property />
<br />
<s:property value="'<hr/>'" escapeHtml="false" />
<br />
<hr />
<!-- set:放數據
scope:application|session|request|page|action
默認範圍是action:1、放到請求範圍2放到contextMap中
-->
<s:set value="'value1'" var="v1" scope="session"></s:set>
<hr />
<s:set value="'value2'" var="v2"></s:set>
contextMap:
<s:property value="#v2" />
<br /> requestScope:
<s:property value="#request.v2" />
<br />
<!-- s:debug沒有顯示出來 -->
<hr />
<!-- push:把對象壓入棧頂,結束標籤後,彈棧 -->
<s:push value="'value3'"></s:push>
<hr />
<!-- bean:給一個類取一個名字 ,把對象放到contextMap中-->
<s:bean name="java.util.Date" var="now"></s:bean>
<s:property value="#now.time" />
<hr />
<!-- action:指向一個動作:struts2中的包含 -->
<s:action name="demo2" executeResult="true"></s:action>
運行結果
iterator:forEach使用頻率相當高:
<!-- iterator:forEach使用頻率相當高 -->
<table border="1">
<tr>
<th>key</th>
<th>value</th>
</tr>
<!-- 指定了var:當前遍歷的元素存到contentMap中,key就是var指定的值 vv=Map.Entry -->
<s:iterator value="#request" var="vv">
<tr>
<td><s:property value="#vv.key" /></td>
<td><s:property value="#vv.value" /></td>
</tr>
</s:iterator>
</table>
--------------------------------------------------------------
運行結果
#
<!-- 不指定var:把當前遍歷的元素存到根棧的棧頂,Map.Entry
status屬性:指向一個對象,記錄着當前遍歷的元素信息。存放到contextMap中
該對象有以下方法:isOdd ; isEven ; isLast ; isFirst ; getCount ;getIndex
-->
<style type="text/css">
.odd {
background-color: #c3f3c3;
}
.even {
background-color: #f3c3f3;
}
</style>
<table border="1">
<tr>
<th>key</th>
<th>value</th>
<th>序號</th>
</tr>
<s:iterator value="#request" status="s">
<tr class="<s:property value='#s.odd?"odd":"even"'/>">
<td><s:property value="key" /></td>
<td><s:property value="value" /></td>
<td><s:property value="#s.count" /></td>
</tr>
</s:iterator>
</table>
運行結果
#
<s:radio name="gender" label="'性別'" list="{'male','female'}"></s:radio>
<hr>
<s:set value="'java'" var="hobby1"></s:set>
<s:checkboxlist name="hobby1"
list="#{'sleep':'睡覺','read':'看書','java':'學java'}"></s:checkboxlist>
<hr>
<!-- if else if 類似:jstl when otherwise -->
<s:set value="A" var="grade" />
<s:if test="#grade==A">優秀
<s:elseif test="#grade==B">良好
<s:else>不及格</s:else>
</s:elseif>
</s:if>
運行結果
<!-- url:和jstl中的url一樣的。URL地址重寫;結合參數使用:參數進行url編碼;/代表當前應用 -->
<s:url action="demo2" var="u1">
<s:param name="hello" value="'你好'"></s:param>
</s:url>
<a href="${u1 }">猛搓</a>
運行結果