Richfaces tabPanel - 使用相同的页面为不同的选项卡动态更改内容

时间:2010-02-24 13:03:29

标签: jsf richfaces seam

我正在使用Seam 2.1.2和RichFaces 3.3.2.SR1。

<a4j:form>
    <rich:tabPanel switchType="ajax">
        <rich:tab label="TAB 1" actionListener="#{outControl.tab1}" immediate="true">
            <ui:include src="/pages/agenda/TabContain.xhtml" />
        </rich:tab>
        <rich:tab label="TAB 2" actionListener="#{outControl.tab2}">
            <ui:include src="/pages/agenda/TabContain.xhtml" />
        </rich:tab>
        ...

TabContain.xhtml:

<rich:extendedDataTable value="#{manBean.seDataModel}" var="out" id="bc_table" 
    sortMode="#{manBean.sortMode}" selectionMode="#{manBean.selectionMode}" 
    tableState="#{manBean.tableState}" selection="#{manBean.selection}" 
    rowKeyVar="rkvar">
    <rich:column sortable="false" id="bc_col_0">
        ...

extendedDataTable的内容应取决于所选的标签。我的第一种方法是在标签中设置actionListener并更改该操作中的manBean。在actionListener之后即使我可以在日志中看到manBean已更改,这也不会反映在浏览器的页面中。这并不令人耳目一新。我尝试在rerender中设置rich:tab,但也没有这样做。

有什么想法吗?对其他方法也很满意,这可能不是最好的方法。

2 个答案:

答案 0 :(得分:3)

我不确定我是否可以轻易地将其写入文字中,但在这里...... 如果您有固定数量的选项卡并且提前知道可能的值,请考虑通过ui:param将参数传递给可重用模板。

实施例 带有tabpanel的模板

<rich:tabPanel switchType="ajax">
  <rich:tab label="TAB 1" >
      <ui:include src="/pages/agenda/TabContain.xhtml">
         <ui:param name="dataModel" value="#{dataBean.dataset1}" />
      </ui:include>
  </rich:tab>
  <rich:tab label="TAB 2">
     <ui:include src="/pages/agenda/TabContain.xhtml">
       <ui:param name="dataModel" value="#{dataBean.dataset2}" />
     </ui:include>
  </rich:tab>

然后在resusableDataTable模板中

<rich:extendedDataTable value="#{dataModel}" ....>
    <rich:column sortable="false" id="bc_col_0">
....
</rich:extendedDataTable>

然后将“dataModel”的值作为参数传递给TabContain.xhtml,并在有#{dataModel}的任何地方替换。

希望这有帮助,我在我们的项目中基本上这样做。

答案 1 :(得分:1)

好的,上面的方法在使用actionListener几次尝试后得出结论(我没有更改正确的属性)。

actionListener

1-选中标签时会触发 2-它通过以下方式获取托管bean:

ManBean mb = (ManBean) context.getExternalContext().getSessionMap().get("manBean");

3-它修改了托管bean,value

中的extendedDataTable

4- important!:在每个f:subview周围添加ui:include - 以避免出现“重复的组件ID”错误!

你会说有更好的方法吗?

感谢。