如何编写jstl而不是scriptlets?

时间:2011-04-28 13:17:16

标签: java jsp jstl

<%
    UserDetailsVO objUserDetailsVO = null;
   ArrayList arlUserDetailsVO = (ArrayList)request.getAttribute("LSTUSERSDETAILS");
   String nonBifFlag = "";
   if(arlUserDetailsVO !=null){
   Iterator it = arlUserDetailsVO.iterator();
   String urlProfile="";
   while(it.hasNext()){
       objUserDetailsVO = (UserDetailsVO)it.next();
        urlProfile = "UserProfile.htm?userID="+objUserDetailsVO.getLogin_Ident()+"&internalID=111"+objUserDetailsVO.getInternalId();

 %>

2 个答案:

答案 0 :(得分:3)

确保来自JSTLjstl.jarstandard.jar位于您的类路径中(即您的网站项目的WEB-INF/lib文件夹)。您需要的jsp页面顶部:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

您的代码的字面翻译如下所示:

<c:set var="objUserDetailsVO" value="${null}"/>
<c:set var="arlUserDetailsVO" value="${requestScope['LSTUSERSDETAILS']}"/>
<c:set var="nonBifFlag" value=""/>
<c:if test="${not empty arlUserDetailsVO}">
    <c:set var="urlProfile" value="${null}"/>
    <c:forEach var="objUserDetailsVO" items="${arlUserDetailsVO}">
        <c:url var="urlProfile" value="UserProfile.htm">
            <c:param name="userID" value="${objUserDetailsVO.login_Ident}"/>
            <c:param name="internalID" value="111${objUserDetailsVO.internalId}"/>
        </c:url>
    </c:forEach>
</c:if>

尽管如此,考虑到你真的不需要将页面/请求属性设置为null,因为它们已经null,你可能会将其削减到这个:

<c:set var="arlUserDetailsVO" value="${requestScope['LSTUSERSDETAILS']}"/>
<c:if test="${not empty arlUserDetailsVO}">
    <c:forEach var="objUserDetailsVO" items="${arlUserDetailsVO}">
        <c:url var="urlProfile" value="UserProfile.htm">
            <c:param name="userID" value="${objUserDetailsVO.login_Ident}"/>
            <c:param name="internalID" value="111${objUserDetailsVO.internalId}"/>
        </c:url>
    </c:forEach>
</c:if>

请注意,通过使用<c:url>构建您的网址,您的网址参数现在将被正确编码,因为它们未在您的Java代码段中进行编码。

答案 1 :(得分:1)

尝试核心代码以及请求的绑定等,例如<c:forEach><c:out><c:if> ...

这是一个short tutorial (或者你可以读德语:a German tutorial/reference)。