JSTL和Struts2谁才是真正的王道

      Struts1、struts2的标签都已经用的很久啦,不过最终还是觉得使用Java标准标签库才是真正的王道。

      开源(V)框架越来越多,只不过是对于JSTL的不断的扩展,不断的加快开发的速度,但过了很久以后再回来看你使用这个开源(V)框架写出来的代码还能清晰的记得这些对象都封装了什么吗?我是不能保证还能清晰的记得,一个项目下来使用的对象封装太多啦,那里还记得当时是怎么做的呢?

      用过Struts2的朋友不知你们是否用过从Session里读取一个List结果集出来,反正我用的时候没有办法从里面把自己想要的结果读取出来,最大还是借助C标签才把自己想要的东西读取出来。(如果有朋友知道如果读取请把您的代码贴出来共享一下。)

      以下是我用C标签读取会话中的方法:

<c:forEach var="vitem" items="${session.history}">
	<p>
		<input name="history" type="radio" value="${vitem.id}" />
		<input type="hidden" id="title${vitem.id}" value="${vitem.itemTitle}" />
		<input type="hidden" id="link${vitem.id}" value="${vitem.itemLink}" />
		<a href="${vitem.itemLink}" class="p">${vitem.itemTitle}</a>
	</p>
</c:forEach>

 当然我的后台在session中封装了一个history的结果集。

 

      虽然Struts2的标签很强大,但也有其自身不足的地方,比如你在后台封装了一个List结果集,在页面里使用的话只能是

<s:iterator value="rollList">
	<li>
		<a target="_blank" href="<%=request.getContextPath()%>/ns_fl/${id}.html" title="${itemTitle}"> 
		<s:if test="${fn:length(itemTitle)>15}">
			<c:out value="${fn:substring(itemTitle,0,15)}" />…
      	    	</s:if> <s:else>
			<s:property value="itemTitle" />
		</s:else>
		</a>
		<span class="datetime"> 
			<s:date format="hh:MM" name="itemPudate" /> 
		</span>
	</li>
</s:iterator>

这段代码过了很长一段时间后,再让你看或者别的人再看的时候,还有那么容易看的懂了吗?你还知道这里面封装的是什么对象吗?

       用标准标签库的话就不一样啦,你可以设定你这个List里封装的对象。

<c:forEach var="newsItem" items="${list}" >
	<li>
		<a target="_blank" href="<%=request.getContextPath()%>/ns_fl/${newsItem.id}.html"> 
			<s:if test="${fn:length(newsItem.itemTitle)>24}">
				<c:out value="${fn:substring(newsItem.itemTitle,0,24)}" />…
			</s:if><s:else>
				<c:out value="${newsItem.itemTitle}" />
			</s:else>
		</a>
	</li>
</c:forEach>

 对比一下以上两段代码,你会发布用C标签你可以清晰的知道自己的List里封装的是什么对象,其实就相当于

for(int i=0;i<list.size();i++){
     Object newsItem = (Object)list.get(i);
}

 

这样就相当用对你的List结果集进行了以对象形式的遍历。相比以来这种代码可读性会更高一些。

    当然C标签也有不好的地方,比如它就只有一个<c:if>但却没有对应的<c:else>标签,这让操作的时候就只能用<c:if>去判断,也会带来很多的不便。

   总的来说项目中不应该过份依赖于一种标签,灵活的使用各种标签,才能让你的页面用户体验更好。

自己制作了JSTL标签库的电子书,感兴趣的朋友可以自己下载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stl的配置方法:<br>1、将jstl.jar和standard.jar拷贝到web-inf/lib下即可(如只使用EL表达式,无需引用这两个包)<br><br>2、在jsp页面头部引入taglib方法如下:<br> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core " %><br> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt " %> <br> <%@ taglib prefix="my" uri="http://www.bjsxt.com/functions " %><br> <br> 注意:JSTL必须在能够支持J2ee1.4/servlet2.4/jsp2.0版本以上的容器才能运行,这个环境配置<br> 是目前最常用的版本<br> <br>3、JSTL重点<br> * EL表达式的用法 <br> * c:out标签<br> * c:if/c:choose/c:when/c:otherwise标签<br> * c:forEach标签<br> * fmt:formatDate标签<br> * fmt:formatNumber标签<br> * 函数库的使用<br> * 自定义函数库<br> * 定义类和方法(必须定义为public static)<br> * 编写tld文件,并且将tld文件放到WEB-INF下<br> * 在jsp中使用taglib指令引入自定义标签库<br> * 直接使用即可<br><br> <br><br> <br><br><h1>测试JSTL核心标签库</h1><br> <hr><br> <li>测试c:out</li><br><br> a(default)=<c:out value="${a}"/><br><br> a(el)=${a }<br><br> b(defalt)=<c:out value="${b}" default="b value"/><br><br> bj(default)=<c:out value="${bj}"/><br><br> bj(escapeXml=true)=<c:out value="${bj}" escapeXml="true"/><br><br> bj(escapeXml=false)=<c:out value="${bj}" escapeXml="false"/><br><br> <p><br> <li>条件控制标签c:if</li><br><br> <c:if test="${v1 lt v2}" var="v"><br> boolean value=${v } &nbsp&nbsp v1 小于 v2<br> </c:if><br> <c:if test="${v1 gt v2}" var="v"><br> boolean value=${v } &nbsp&nbsp v1 大于 v2<br> </c:if><br> <li>条件控制标签c:choose,c:when,c:otherwise</li><br><br> <c:choose><br> <c:when test="${v1 gt v2}"><br> v1 大于 v2<br> </c:when><br> <c:otherwise><br> v1 小于 v2<br> </c:otherwise><br> </c:choose><br> <br><br> <c:choose><br> <c:when test="${empty valuelist}"><br> valuelist为空<br> </c:when><br> <c:otherwise><br> valuelist不为空<br> </c:otherwise><br> </c:choose><br> <p><br> <li>循环控制标签:c:foreach</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}"><br> <tr><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:foreach varstatus的用法</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}" varStatus="vs"><br> <c:choose><br> <c:when test="${ vs.count % 2 == 0}"><br> <tr bgcolor="red"><br> </c:when><br> <c:otherwise><br> <tr><br> </c:otherwise><br> </c:choose><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:foreach</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}" begin="2" end="8" step="2"><br> <tr><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:fortoken</li><br><br> <c:forTokens items="${tokenstr}" delims="," var="v"><br> <c:out value="${v}"/><br> </c:forTokens> <br> <p><br> <li>循环控制标签:c:foreach-map</li><br><br> <c:forEach items="${map}" var="v"><br> ${v}<br><br> ${v.key}=${v.value }<br><br> </c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值