且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

关于Struts2中的s标签和JSTL中的c标签的对比

更新时间:2022-05-16 03:45:01

为了举例简单,这里我直接在action中设置一个ArrayList集合,然后放到HttpServletRequest对象***前台JSP页面获取,代码如下:

1
2
3
4
5
6
7
8
9
List<String> mathList = new ArrayList<String>();
mathList.add("高等数学");
mathList.add("离散数学");
mathList.add("线性代数");
mathList.add("概率论与数理统计");
mathList.add("数字逻辑");
mathList.add("数值分析");
mathList.add("运筹学");
ServletActionContext.getRequest().setAttribute("test", mathList);

在JSP页面中循环打印,用s标签和c标签分别是这样的:

1
2
3
4
5
6
7
8
9
<s:iterator var="temp" value="#request.test">
        <s:property value="#temp" />
    </s:iterator>
    <br><hr>
 
    <c:forEach items="${requestScope.test }" var="temp">
        <c:out value="${temp }"></c:out>
    </c:forEach>
    <br><hr>

可以发现:s标签通过 “#request.test这种形式获取request对象,而c标签则通过EL隐式对象 “${requestScope.test }”(PS:不熟悉的话可以参考这篇文章:http://www.zifangsky.cn/2016/02/jsp中的el隐式对象/)来获取request对象;其次,<s:property value=”#temp” />里的value值只能是一个变量,不能直接输出一段文字,而<c:out value=”${temp }”></c:out>不仅可以通过EL表达式输出变量,而且可以直接输出一段文字


其他的一些测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<s:iterator var="temp0" value="{'1','2','3'}">
        <s:property value="temp0" />
    </s:iterator>
    <br><hr>
     
    <s:iterator value="{'java se','java web','java me','java ee'}"
        var="name" status="status">
        <s:if test="#request.test != null">
            <s:property value="name" />
        </s:if>
    </s:iterator>
    <br><hr>
 
    <c:if test="${empty requestScope.test}">
        <c:out value="c empty"></c:out>
    </c:if>
    <c:if test="${!empty requestScope.test}">
        <c:out value="c not empty"></c:out>
    </c:if>

以上代码的完整输出:

关于Struts2中的s标签和JSTL中的c标签的对比




本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1741855,如需转载请自行联系原作者