java - 我只想在.jsp文件中写入jsp,jSTL

标签 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);
            %>

最佳答案

这个

<% 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/

相关文章:

jsp - Tomcat 请求处理实例的优点/缺点是什么?

class - JSP EL 内部 JSP 私有(private)静态类

jsp - 带有 c :foreach jSTL tag 的二维数组列表

java - 为什么执行这段代码时蛇没有出现?

java - 如何序列化/反序列化 "splashed"复杂类型?

java - 使用EhCache作为主要数据源而不是数据库

java - 结果集丢失第一个值

java - 使用 <c :import> with spring views 的可能性

jsp - 如何制作 fmt :formatDate work for form:input

java - charset=unicode 是 UTF-8、UTF-16 还是其他?