我已经尝试为我的应用程序提供web2.0支持。为此我想提供rich:tabpanel,它可以动态包含多个选项卡。用户可以添加和删除选项卡。为此我使用c:foreach for表示rich:tab的列表。该选项卡包含rich列表:panel包含详细信息。面板仅包含简短内容。通过单击读取更多链接,用户可以阅读完整内容。为此我需要重新呈现a4j :outputpanel,其中包含rich:panel的列表。但是我不能这样做。因为我已经使用c:freach来渲染tab的列表。因此我无法获得a4j的精确id:包含列表的outputpanel rich:panels.The4j:outputpanel不允许使用el表达式。我的代码片段在下面,
<c:forEach items="#{Home.tabList}" var="homeBean" varStatus="status">
<el:define value="${status.count}" var="rowIndex"/>
<rich:tab id="homeTab" label="#{homeBean.header}"
name="#{homeBean.header}" switchType="client"
onlabelclick="coinSliderFunction('coin-slider#{rowIndex}')">
<a4j:outputPanel id="subHeaderPanel">
<h:panelGrid columns="3" cellpadding="3" cellspacing="3"
id="detailGrid" rendered="#{!Home.subHeaderDetailedContentPanelRendered}"
columnClasses="layoutContentColumnClass,
layoutContentColumnClass,layoutContentColumnClass">
<%--SubHeader List--%>
<c:forEach items="#{homeBean.subHeaderBeanList}" var="subHeaderBean" varStatus="subHeaderStatus">
<rich:panel header="#{subHeaderBean.header}" id="subHeaderPanels">
<h:outputText id="outputText" value="#{subHeaderBean.briefContent}" escape="false"/>
<a4j:commandLink value="Read More" id="readMoreLink"
action="#{Home.navigationHandler}" reRender="subHeaderPanel">
<a4j:actionparam name="headerActionParam" value="#{homeBean.header}" assignTo="#{Home.headerName}"/>
<a4j:actionparam name="subHeaderActionParam" value="#{subHeaderBean.header}" assignTo="#{Home.subHeaderName}"/>
</a4j:commandLink>
</rich:panel>
</c:forEach>
</h:panelGrid>
<%--SubHeader Detail Panel--%>
<h:panelGrid rendered="#{Home.subHeaderDetailedContentPanelRendered}" id="subHeaderGrid">
<h:outputText id="detailedContent" value="#{Home.subHeaderDetailedContent}" escape="false"/>
<f:verbatim><center></f:verbatim>
<a4j:commandLink id="backLinks" value="#{platform.backButtonLabel}"
action="#{Home.backButtonAction}"
reRender="leftOutputPanel"/>
<f:verbatim></center></f:verbatim>
</h:panelGrid>
</a4j:outputPanel>
</rich:tab>
</c:forEach>
我怎样才能实现这一目标?请帮帮我。
答案 0 :(得分:1)
由于无法确定forEach循环中呈现的tabe面板的id,因此必须重新渲染panelGrid detailGrid 。请注意缓存托管bean中选项卡上显示的所有值。如果这样做,则不需要数据库调用,并且所有选项卡的重新渲染都很快。