Ant*_*nin 5 jsf primefaces jsf-2 panelgrid
我必须以恐怖的方式制作一份表格清单.它们中的每一个都具有可变数量的列(具有固定行).
为了执行此操作,我首先将<p:panelGrid>内部放入<ui:repeat>:所以我正确地生成了一个表列表.
然后,为了恐怖地制作柱子,我试着把它们放在一个 <ui:repeat>或一个 <c:forEach>里面<p:panelGrid>.在结果中我没有获得任何行.
我在这里写了一个小例子.在bean中testBackingBean,我已定义(并初始化)变量ArrayList<ArrayList<String>> tables.这是不会产生预期结果的xhtml:
<ui:repeat var="table" value="#{testBackingBean.tables}">
<p:panelGrid>
<f:facet name="header">
<p:row>
<p:column >header of #{table}</p:column>
</p:row>
</f:facet>
<p:row>
<c:forEach var="row" items="${table}">
<p:column>#{row}</p:column>
</c:forEach>
</p:row>
</p:panelGrid>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
值得注意的是,标题行正确转换#{table}为字符串.问题是我看不到任何数据行.
此外,如果我使用<table>而不是<p:panelGrid>一切工作如期望的那样.
另外,我尝试了不同的排列<c:forEach>并<ui:repeat>没有更迭.
那么,我怎样才能产生更多的表格(使用素数面)并设置一个dinamical数量的列?
谢谢!
编辑:我想使用两个<c:forEach>,但即使只有一个<c:forEach>我得到一个空的结果.事实上,如果我尝试以下xhtml:
<c:forEach items="${testBackingBean.tables}" var="tabella">
current element: #{tabella}
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
然后我得到一个空的结果.(我知道,这是一个不同的问题)
Bal*_*usC 13
从XHTML源代码到生成的HTML输出的转换分为两步.
首先,在视图构建期间,XHTML源代码被解析并在UIComponent表示JSF UI组件树的Java 实例树中转换,如可用的那样FacesContext#getViewRoot().
然后,在视图渲染时,JSF UI组件树生成HTML输出并将其写入HTTP resopnse,从UIViewRoot#encodeAll()方法开始.
Taghandlers喜欢所有JSTL <c:xxx>标签,几个JSF <f:xxx>标签,只有几个Facelets <ui:xxx>标签在视图构建期间运行.UI组件,如所有JSF <h:xxx>标记,几个Facelets <ui:xxx>标记以及仅<f:xxx>在视图渲染时间内运行的几个JSF 标记.
的<c:forEach>是一个taghandler和所述<ui:repeat>是一个UI组件.
换句话说,<c:forEach>基于<c:forEach items>视图构建时间在JSF组件树中多次重新创建内部声明的UI组件,视图构建时间又在视图渲染时间内单独生成每个自己的HTML输出.内部声明的UI组件<ui:repeat>在视图构建时间内仅在JSF组件树中创建一次,而后者又基于<ui:repeat value>在视图渲染时间内生成HTML输出而被多次重用.
您的具体问题是由<ui:repeat var="table">仅在视图渲染时间期间可用的事实引起的,而不是在视图构建时期间.在<c:forEach>基本检索#{null}的值时,它是关于在视图生成时运行.
您可以通过更换外解决这个<ui:repeat>通过<c:forEach>.虽然我想知道你是否不能更好地使用<ui:repeat><p:dataTable><p:columns>.
| 归档时间: |
|
| 查看次数: |
19750 次 |
| 最近记录: |