我想在.jsp文件中只写jsp,jstl

时间:2013-09-06 15:34:42

标签: java jsp jstl el

我正在学习JSTl + EL,我不喜欢我必须在<% %>文件中使用JSP标签。我也没有找到关于这个主题的好文档 - 欢迎好指点。 (这:http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/没有多大帮助)。所以我的问题是我可以在下面写一些更好的JSTL + EL,以便我可以从我的JSP中获取<% %>个标签吗? :)

<% if (session.getAttribute("error") != null) {%>
            <jsp:useBean id="error" class="java.lang.String" scope="session"></jsp:useBean>
            <%=error %>     
            <%}else if(session.getAttribute("searchData")!= null){%>
            <%=session.getAttribute("searchData")!=null %>
            <jsp:include page="session_object_ok.jsp"></jsp:include>            
            <%}%>
            <%
                session.setAttribute("searchData", null);
            %>

3 个答案:

答案 0 :(得分:3)

<% if (session.getAttribute("error") != null) {%>

可以翻译为

<c:if test="${error != null}">

或者如果你想覆盖空字符串

<c:if test="${not empty error}">

另一种选择是<c:choose><c:when>


<jsp:useBean id="error" class="java.lang.String" scope="session"></jsp:useBean>
如果您事先已经在servlet中完成了session.setAttribute("error", error),那么

是完全没必要的。完全摆脱它。


<%=error %>     

可以翻译为

${error}

或者如果您想要阻止XSS攻击漏洞,如果它包含用户控制的数据(例如请求参数)

<c:out value="${error}" />

请注意,如果它为空或空,则它已经打印 nothing 。所以围绕它的整个<c:if>基本上是多余的。


此,

<%}else if(session.getAttribute("searchData")!= null){%>

可以翻译为

<c:if test="${searchData != null}">

或只是${not empty searchData}。另一种选择是同一<c:otherwise>中的<c:choose>


<% session.setAttribute("searchData", null); %>

可以翻译为

<c:remove scope="session" var="searchData" />

但是,如果它总是在当前请求中设置,那么这没有任何意义。只需事先将request.setAttribute("searchData", searchData)作为请求attribtue设置在servlet中。


总而言之,只要您的servlet看起来像这样:

try {
    SearchData searchData = searchService.find(query);
    request.setAttribute("searchData", searchData);
} catch (SomeException e) {
    request.setAttribute("error", "Sorry, search failed. Please try again.");
}

request.getRequestDispatcher("/WEB-INF/searchResult.jsp").forward(request, response);

然后这应该做:

${error}
<c:if test="${not empty searchData}">
    <jsp:include page="session_object_ok.jsp" />
</c:if>

你的JSP包含页面有一个非常奇怪的文件名。


另见:

答案 1 :(得分:0)

像这样简单的东西,通过jstl核心标签进行简单的谷歌搜索就可以让你做到这样的事情:

<c:set var="yourError" value="${error}" scope="session"/>
<c:choose> 
    <c:when test="${not empty yourError}">
        <c:out value="$(yourError}"/>
    </c:when>
    <c:when test="${searchData}">
        <jsp:include page="session_object_ok.jsp"/>
    </c:when>
</c:choose>
<c:set var="searchData" value="null"/>

答案 2 :(得分:0)

有一本书可以帮到你。见Shawn Bayern的JSTL in Action

另请参阅Stack Overflow中的'jstl' tag wiki