Java 根据条件将jsp包含为标头

Java 根据条件将jsp包含为标头,java,javascript,jakarta-ee,jsf-2,Java,Javascript,Jakarta Ee,Jsf 2,我使用的是JSF-2.0,我试图将一个jsp作为当前jsp的标题,但我只想根据登录凭据更改包含的jsp。 更清楚的是…根据登录到我的应用程序的人的不同,标题菜单(包括jsp)应该不同。我尝试过用下面的方法实现,但没有成功。如果有任何帮助,我们将不胜感激 <html> <head></head> <body> <% String menuHeader = (String) FacesContext.getCurrentInstanc

我使用的是JSF-2.0,我试图将一个jsp作为当前jsp的标题,但我只想根据登录凭据更改包含的jsp。 更清楚的是…根据登录到我的应用程序的人的不同,标题菜单(包括jsp)应该不同。我尝试过用下面的方法实现,但没有成功。如果有任何帮助,我们将不胜感激

<html>
 <head></head>
 <body>
  <%
  String menuHeader = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("menuAssigned");
  if (menuHeader.equals("XX")){ %>
  <f:view> <jsp:include page="XHeader.jsp" /> </f:view>
  <% }else if(menuHeader.equals("YY")){ %>
 <f:view>  <jsp:include page="YHeader.jsp" />
  <%}%>
   ---
  </f:view>
 </body>
</html>

---

简短回答,使用JSP或JSF流控制。不要把它们混得太多

<html>
 <head></head>
 <body>
  <f:view>
    <h:panelGroup rendered="#{menuHeader == 'XX'}">
          <%@include file=”XHeader.jsp" %>
    </h:panelGroup>
    <h:panelGroup rendered="#{menuHeader == 'YY'}">
          <%@include file=”YHeader.jsp" %> 
    </h:panelGroup>
  </f:view>
 </body>
</html>

也许静态包括?同样,我已经在JSF中使用facelets好几年了。不再习惯JSP的东西了。已经有一段时间了。

不要使用scriptlet。永远

您的
menuAssigned
变量仅在EL by
#{menuAssigned}
中可用。我建议将
menuAssigned
变量值与JSP include文件名对齐。那你就可以用


假设
menuAssigned
XX
,那么这将包括
XXHeader.jsp



与具体问题无关,当您显然已经在使用JSF2.0时,为什么要使用遗留JSP?JSF2.0是JSP的优秀继承Facelets(XHTML)附带的?

我认为这会有问题。JSF的动态包含。@凯文:它是有效的,与你的答案相反。您似乎几乎没有使用JSF+JSP的实际经验。谢谢!非常感谢。就像我说的,我有使用facelets的经验。很多。我关心的是JSP和JSF在某些情况下不能很好地混合。如果您在该页面上更改“menuAssigned”的值,则此处可能无法正常工作,因为视图模型需要特定的层次结构。这和你不混合“c:if”标签的原因是一样的,但我猜你对此也没什么问题吧?@Kevin:你什么也没说。至于可能的混合问题,只有当EL变量仅存在于JSF组件的范围内时,它才会起作用。但在这种特殊情况下,情况并非如此。关于JSF组件和基于JSP的标记如何混合的外行解释,请参见本文:我在回答中提到了这一点。对不起,不清楚。我并不担心“menuAssigned”的可用性,因为支持JSF的视图会因为动态包含不同的文件而发生变化。你似乎并不关心这件事,正如前面提到的,我是一个喜欢facelets的人,所以我相信你是对的。