用spring标签替换特定的scriptlet

时间:2016-07-10 09:24:12

标签: java spring jsp

我正在寻找好的例子,如何用spring标签替换这个java代码。

<div>
    <%
        Object user = (String) request.getSession().getAttribute("User");
        Object role = (String) request.getSession().getAttribute("role");
        if(user == null) {
            out.println("<a href=\"register.jsp\">Register</a><a href=\"login.jsp\">Login</a>");
        } else {
            out.println(" Hello  " + user + "  " + "<a href=\"LogoutServlet\" >Logout</a>");
        }   
    %>
</div>
<div class="menu">
    <% 
        if (role != null) {
            if(role.equals("admin")) { 
                out.println("<a href=\"adminPanel.jsp\">Admin Panel</a></br>");
                out.println("<a href=\"userOrders\">Orders</a></br>");
            }
        } else {
            if(user != null) 
                out.println("<a href=\"userOrders\">Orders</a></br></br>");
        }
    %>
</div>

1 个答案:

答案 0 :(得分:2)

对于此特定示例,核心JSTL标记就足够了。但是,请确保这个奇怪的条件流程符合您的预期。

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

<c:choose>
    <c:when test="${empty sessionScope.User}">
        <a href='register.jsp'>Register</a> 
        <a href='login.jsp'>Login</a>
    </c:when>
    <c:otherwise>
        Hello  <c:out value="sessionScope.User"/>
        <a href='LogoutServlet'>Logout</a>
    </c:otherwise>
</c:choose>
<div class="menu">
    <c:choose>
        <c:when test="${not empty sessionScope.role}">
            <c:if test="${sessionScope.role eq 'admin'}">
                <a href='adminPanel.jsp'>Admin Panel</a></br>
                <a href='userOrders'>Orders</a></br>
            </c:if>
        </c:when>
        <c:otherwise>
            <c:if test="${not empty sessionScope.User}">
                <a href='userOrders'>Orders</a></br></br>
            </c:if>
        </c:otherwise>  
    </c:choose>
</div>

请注意,如果空字符串,${not empty sessionScope.role}将评估为false。如果这不是所需的行为,请使用${sessionScope.role != null}

如果您考虑在项目中使用Spring Security,那么使用Spring Security taglib编写类似内容会更容易,更好。