根据JSF中的条件将jsp包含为头

时间:2011-11-06 15:32:37

标签: java javascript java-ee jsf-2

我正在使用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>

2 个答案:

答案 0 :(得分:0)

简短回答,使用EITHER 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的东西了。已经有一段时间了。

答案 1 :(得分:0)

不要使用 Scriptlets 。永远。

您的menuAssigned变量仅在#{menuAssigned}的EL中可用。我建议将menuAssigned变量值与JSP包含文件名对齐。然后你可以使用

<jsp:include page="#{menuAssigned}Header.jsp" />

想象一下,menuAssignedXX,然后会包含XXHeader.jsp


对具体问题

无关,你为什么要使用遗留JSP,而你显然已经在JSF 2.0上出现了JSP的强大后继Facelets(XHTML)? / p>