Struts tag lib
1 Struts2提供了功能强大的标签库,这些标签库分为两类:用户界面标签即UI标签,非用户界面标签即非UI标签。
1.1非用户界面标签:主要用于逻辑控制和数据访问,分为:逻辑逻辑控制标签,数据访问标签。
>逻辑控制标签:完成分支和循环操作
>数据访问标签
1.2用户标签UI标签:主要用于生成html元素。分为表单标签,非表单标签,Ajax标签。
>表单标签
<s:iterator>,
2 非UI标签详解
2.1 逻辑控制标签
>if/eslsif/else标签
注意:声明使用struts标签库<%@ taglib prefix="s" uri="/struts-tags" %>
<s:set name="score" value="#parameters.score[0]" scope="page"></s:set><!-- parameters拿到传过来的参数吗???? -->
<s:if test="#attr.score >= 90" >
优秀
</s:if>
<s:elseif test="#attr.score >= 80">
良好
</s:elseif>
<s:elseif test="#attr.score >= 60">
及格
</s:elseif>
<s:else>
不及格
</s:else>
运城该jsp页面并添加?score=56如: http://localhost/strutstag/IfElseTags.jsp?score=65
>itetrator标签
<body>
<s:set id="myArray" value="{'hello','world','hi','study'}"></s:set>
<s:iterator value="#myArray" id="word">
<s:property value="#word"/><br/>
</s:iterator>
<br/>--------------------------------------------------------------------------<br/>
<s:iterator value="#myArray">
<s:property /><br/>
</s:iterator>
</body>
</html>
结果:
>set,property标签
<body>
<s:set name="janesName">Jane Doe</s:set>
范围:<s:property value="#janesName"/><br/><!--官方的例子有没有#都对 -->
范围EL:${janesName }
<br/>-------------------------------------------------------<br/>
<s:set var="actionID" scope="action">李四</s:set>
action范围:<s:property value="actionID"/><br/>
action范围EL:${actionID }
<br/>--------------------------------------------------<br/>
<s:set name="pageID" scope="page" value="zhangsan"></s:set><!-- //worng ???? -->
<s:set name="pageID" scope="page" >张三</s:set> <!-- right -->
page范围:<s:property value="#attr.pageID"/><br/>
page范围EL:${pageScope.pageID }
<br/>------------------------------------------------------------<br>
<s:set name="requestID" scope="request">王五</s:set>
request范围:<s:property value="#request.requestID"/><br/>
request范围EL:${requestScope.requestID }
<br/>------------------------------------------------------<br/>
<s:set name="sessionID" scope="session">赵六</s:set>
session范围:<s:property value="#session.sessionID"/><br/>
session范围EL:${sessionScope.sessionID }
<br/>-----------------------------------------------------------<br/>
<s:set name="applicationID" scope="application">钱七</s:set>
application范围:<s:property value="#application.applicationID"/><br/>
application范围EL:${applicationScope.applicationID }
</body>
结果
>append
<body>
<s:append var="appendTest">
<s:param value="{'a','b','c'}"></s:param>
<s:param value="{'A','B','C'}"></s:param>
</s:append>
<s:iterator value="#appendTest">
<s:property/>
</s:iterator>
</body>
结果:
>merge
<body>
<s:merge var="mergeTest">
<s:param value="{'a','b','c'}"></s:param>
<s:param value="{'A','B','C'}"></s:param>
</s:merge>
<s:iterator value="#mergeTest">
<s:property/>
</s:iterator>
</body>
结果
>generator
<body>
<s:bean name="com.mycom.action.MyConverter" var="myConverter"></s:bean>
<s:generator separator="," val="%{'aaaa,bbbb,cccc'}" count="2">
<s:iterator>
<s:property/>
</s:iterator>
</s:generator>
<br/>---------------------------------------------------------------------------<br/>
<s:generator separator="," val="%{'aaaa,bbbb,cccc'}" count="3" converter="myConverter">
<s:iterator>
<s:property/>
</s:iterator>
</s:generator>
<br/>---------------------------------------------------------------------------<br/>
</body>
Myconverter.java
package com.mycom.action;
import org.apache.struts2.util.IteratorGenerator.Converter;
publicclass MyConverter implements Converter {
@Override
public Object convert(String token) throws Exception {
// TODO Auto-generated method stub
return"Convertor-"+token;
}
}
结果:
>subset
subsetTag.jsp
<body>
<s:subset source="{'aaa','bbb','ccc','ddd'}" start="1" count="2" >
<s:iterator>
<s:property/>
</s:iterator>
</s:subset>
<br/>-------------------------------------------------------------<br/>
<s:subset source="myList" start="0" count="2" decider="myDecider" > //注意此处的myDecider对应action中的getMydecider
<s:iterator>
<s:property/>
</s:iterator>
</s:subset>
</body>
SubsetTagTestAction.java
package com.mycom.action;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.util.IteratorGenerator.Converter;
import org.apache.struts2.util.SubsetIteratorFilter.Decider;
import com.opensymphony.xwork2.ActionSupport;
public class SubsetTagTestAction extends ActionSupport {
private List myList;
private Decider myDecider;
@Override
public String execute() throws Exception {
myList = new ArrayList<String>();
myList.add("AAA");
myList.add("BBB");
myList.add("CCC");
myList.add("DDD");
myList.add("EEE");
return SUCCESS;
}
public List getMyList() {
return myList;
}
public Decider getMyDecider() {
return new Decider(){
@Override
public boolean decide(Object element) throws Exception {
if((String)element == "AAA")
return false;
return true;
}
};
}
}
在struts.xml中配置action ,后在IE里输入:http://localhost/strutstag/subsetTagAction
结果:
>sort
<s:sort comparator="myCompartor" source="myList" var="sortTest"> //注意此处的myCompartor对应action中的myCompartor
<s:iterator>
<s:property/>
</s:iterator>
</s:sort>
SortTagTestAction.java
package com.mycom.action;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import org.apache.struts2.util.IteratorGenerator.Converter;
import org.apache.struts2.util.SubsetIteratorFilter.Decider;
import com.opensymphony.xwork2.ActionSupport;
public class SortTagTestAction extends ActionSupport {
private List myList;
private Comparator<String> myCompartor;
@Override
public String execute() throws Exception {
myList = new ArrayList<String>();
myList.add("AAA");
myList.add("CCC");
myList.add("BBB");
myList.add("EEE");
myList.add("DDD");
return SUCCESS;
}
public List getMyList() {
return myList;
}
public Comparator<String> getMyCompartor() {
return new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
};
}
}
同上配置action,IE中输入http://localhost/strutstag/SortTagAction得结果