2011-04-16 34 views
0

我有一个问题来生成动态菜单,我使用JSF1.2。我尝试了c:forEach和arrayList来生成动态的rich:panelMenu,因为BalusC在相关的论坛中建议,但是Accessor从未在c:forEach中触发过。它毁了我一天。任何人都可以为我提供解决方案如何生成动态丰富的:panelMenu?

<c:forEach items="#{serviceListBean.services}" var="child"> 
       <rich:panelMenuItem mode="none">     
        <h:outputText value="#{child.serviceId}"></h:outputText>           
       </rich:panelMenuItem> 
      </c:forEach> 

这段代码有什么问题?任何人都可以启发我吗?有关信息,serviceListBean是请求范围的bean。

回答

0

两个可能的原因:

  1. JSTL未声明为在JSP或Facelets的标记库。要确认此操作,请在浏览器中单击右键并选择查看源代码。您是否看到<c:forEach>标记在生成的HTML中未解析?如果您使用JSP,声明如下:

    <%@taglib prefic="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    

    或者,如果你使用的Facelets,如根元素如下声明它:

    xmlns:c="http://java.sun.com/jsp/jstl/core" 
    

    在如Tomcat一些服务器,这些服务器没有按不随JSTL出货,您还需要先安装JSTL,另请参阅this info page

  2. 这段代码又被放置在一个JSF重复组件内,如<h:dataTable>var="serviceListBean"。这也不起作用。您还需要用<c:forEach>替换JSF重复组件。

+0

gr8 BalusC,用您的第一个解决方案解决。我使用错误的taglib uri作为<%@ taglib prefix =“c”uri =“http://java.sun.com/jstl/core”%>,现在更改为<%@ taglib prefix =“c”uri =“ http://java.sun.com/jsp/jstl/core“%>,得到了工作。也有人在这个http://stackoverflow.com/questions/2394394/using-java-to-create-a-dynamic-richpanelmenu中引用,他使用http://java.sun.com/jstl/core,他得到了解决。这向我保证,没有问题。所以我从来没有想过要改变,如果BalusC评论。为什么这个taglib uri混乱?记录在哪里? – gkp 2011-04-17 05:51:00

+0

它是1.0 uri。另见http://stackoverflow.com/tags/jstl/info – BalusC 2011-04-17 12:07:52