p:tabView:指向选项卡的直接链接

时间:2014-02-10 11:46:16

标签: jsf-2 primefaces tabview

我想要一个链接,打开p:tabView的特定标签。我试过这个链接,但是

它不起作用(第一个标签打开):/jsf/.....#tabView:tabA

这是我的TabView:

  <p:tabView id="tabView">        
            <p:tab id="tabb" title="B">
            </p:tab>    
        <p:tab id="tabA" title="A">
        </p:tab>            
 </p:tabView>

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

您可以使用PrimeFaces文档中所述的对小部件的javascript调用。 将小部件名称提供给tabView,并使用.select(tabIndex)

更改选项卡

如果您从另一个页面重定向,您可以传递一个请求参数(例如../url?tabIndex=0)来确定将激活选项卡,从url参数获取变量并再次使用该选项卡激活客户端api(javascript调用)。

<p:tabView id="tabView" widgetVar="myTabExample">        
          </p:tab>
        <p:tab id="tabb" title="B">
         </p:tab>   
        <p:tab id="tabA" title="A">
        </p:tab>            
 </p:tabView>

<script>
   myTabExample.select(0);
</script>

我还添加了一个带参数

的示例
 <p:tabView id="tabView" widgetVar="myTabExample">        
              </p:tab>
            <p:tab id="tabb" title="B">
             </p:tab>   
            <p:tab id="tabA" title="A">
            </p:tab>            
     </p:tabView>

    <script>
    //function to parse get parameters from url
    //taken from http://stackoverflow.com/questions/831030/how-to-get-get-request-parameters-in-javascript
    function get(name){
        if (name=(new RegExp('[?&]'+encodeURIComponent(name)+'= ([^&]*)')).exec(location.search))
        return decodeURIComponent(name[1]);
     }

    myTabExample.select(get("tabIndex"));
</script>

答案 1 :(得分:3)

这是一个替代解决方案,它不需要js并支持浏览器后退导航:

<p:tabView cache="true" activeIndex="#{param.id}">
   <p:tab title="First Tab">
      // Content
   </p:tab>
   <p:tab title="Second Tab">
      // More Content
   </p:tab>
</p:tabView>

在第一个标签打开时加载页面:

/mypage.xhtml?id=0

在第二个标签打开时加载页面:

/mypage.xhtml?id=1

但缺点是您只能使用整数,使用标签ID来添加标签是不可能的。