如何在具有IF结构的另一个JSP中包含JSP页面:
我可以在JSP文件中使用这部分代码:
<%
UtilisateurAction useraction = new UtilisateurAction();
String statut = useraction.Connect();
//System.out.println(statut);
if(statut=="ADMIN"){
%> <%@ include file="menu.jsp"%>
<%}
else {if(statut=="USER"){%>
<%@ include file="menu.jsp"%>
<%}} %>
答案 0 :(得分:1)
<%@ include file="menu.jsp"%>
是静态包含,因此无论条件如何,它都将包含menu.jsp
的内容。但只有条件为真时才会执行。
<jsp:include page="menu.jsp" flush="true"/>
是动态包含的,因此,只有满足条件才会实际调用menu.jsp
页面。但是从另一方menu.jsp
必须是一个完整的页面,而不是一个页面片段,并且不能使用在父母&#39;中定义的变量。页。
所以,这实际上取决于你想要达到的目标。
正如Marco建议的那样,您应该使用"ADMIN".equals(statut)
代替==
。
答案 1 :(得分:1)
如果您只想要使用<c:if>
,则必须拥有范围变量。当前请求的属性,应用程序上下文的会话各自的范围是请求,会话和应用程序。
您可以轻松地将变量放在页面上下文中(仅对当前jsp有效,而@include
包含的其他内容有效,但<jsp:include>
不包含):
<%
...
String statut = useraction.Connect();
pageContext.setAttribute("statut", statut);
%>
<c:if test="${statut == 'ADMIN'}">
...
</c:if>
但是如果你想对许多人进行排他性测试,那么正确的标签是<c:choose>
:
<%
String statut = useraction.Connect();
pageContext.setAttribute("statut", statut);
%>
<c:choose>
<c:when test="${statut eq 'ADMIN'}">
...
</c:when>
<c:when test="${statut == 'USER'}">
...
</c:when>
<c:otherwise>
<p>Status ${statut} not found</p>
</c:otherwise>
</c:choose>
我刚测试过它(在我的机器上......),而其他条款可以解释为什么你没有得到你想要的东西。
答案 2 :(得分:0)
在条件检查中,您可以使用<jsp:include page="menu.jsp" flush="true"/>
在jsp中包含页面。
如果您没有使用jstl并且在法定值为ADMIN或USER时尝试包含menu.jsp
,则可以这样做:
<% if (statut.equals("ADMIN") || statut.equals("USER")) { %>
<jsp:include page="menu.jsp" flush="true"/>
<% }%>
请注意,menu.jsp
应与当前jsp位于同一文件夹中,否则为相对路径。
答案 3 :(得分:0)
所以我必须使用。 我想要的是根据法定值包含不同的页面。
<%
UtilisateurAction useraction = new UtilisateurAction();
String statut = useraction.Connect();
//System.out.println(statut);
if(statut=="ADMIN"){
%> <%@ include file="menu.jsp"%>
<%}
else {if(statut=="USER"){%>
<%@ include file="menuother.jsp"%>
<%}} %>