我正在学习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);
%>
答案 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)
<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