我正在学习 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);
%>
最佳答案
这个
<% 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>
如果您已经完成了session.setAttribute("error", error)
,则完全没有必要预先在 servlet 中。只需完全摆脱它即可。
这个
<%=error %>
可以翻译为
${error}
或者如果您希望防止 XSS 攻击漏洞(如果它包含用户控制的数据(例如请求参数))
<c:out value="${error}" />
请注意,如果它为 null 或为空,它就不会打印任何内容。所以整个<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)
预先在 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 包含页面有一个相当奇怪的文件名。
<小时/>另请参阅:
关于java - 我只想在.jsp文件中写入jsp,jSTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18661432/