Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 动态禁用/启用p:accordionPanel中的p:tab_Jsf_Primefaces - Fatal编程技术网

Jsf 动态禁用/启用p:accordionPanel中的p:tab

Jsf 动态禁用/启用p:accordionPanel中的p:tab,jsf,primefaces,Jsf,Primefaces,我只希望动态启用或禁用单个选项卡(而不是整个accordion面板)。 我尝试了以下方法,以下是我的代码: index.xhtml <p:accordionPanel id="accordionPanelId" widgetVar="accordionPanelWidget"> <p:tab id="tab1" title="First Tab"> <h:outputText value="Contents of Tab1"/>

我只希望动态启用或禁用单个选项卡(而不是整个accordion面板)。 我尝试了以下方法,以下是我的代码:

index.xhtml

<p:accordionPanel id="accordionPanelId" widgetVar="accordionPanelWidget">
   <p:tab id="tab1" title="First Tab">
       <h:outputText value="Contents of Tab1"/>
       <h:form>
         <p:commandButton value="Enable Tab2" action="#{tabBean.buttonAction}" update=":accordionPanelId:tab2"/>
       </h:form>
   </p:tab>

   <p:tab id="tab2" title="Second Tab" disabled="#{tableBean.disableTab}">
      <h:outputText value="Contents of Tab2"/> 
   </p:tab>
</p:accordionPanel>
使用上述方法,Tab2的内容显示出来,但Tab标题仍然冻结, 也许这不是一个上帝的方法来实现这一点。。。 请建议此方法的任何其他方式或更改

编辑:如果我按如下方式更新整个手风琴面板,上述方法工作正常:


但我不想更新所有的标签


您需要将选项卡的
disabled
属性绑定到将在服务器端切换的
disableTab
backingbean变量。为了反映您在服务器端所做的更改,您可以在客户端用ajax更新
。使用当前设置,您只需进行以下更改:

  • disabled
    属性绑定到已设置的backingbean变量

       <p:tab id="tab2" title="Second Tab" disabled="#{tabBean.disableTab}">
           <h:outputText value="Contents of Tab2"/> 
       </p:tab>
    
    
    
  • 使用javascript API启用选项卡后自动切换到该选项卡

       <p:tab id="tab1" title="First Tab">
          <h:outputText value="Contents of Tab1"/>
             <h:form>
               <p:commandButton value="Enable Tab2" oncomplete="accordionPanelWidget.select(2)" action="#{tabBean.buttonAction}" update=":accordionPanelId:tab2"/>
            </h:form>
       </p:tab>
    
    
    

  • 您必须更新所有accordionPanel才能启用/禁用选项卡。在这种情况下,您必须更新accordionPanelId。但是,您可以在accordionPanel中使用dynamic=“true”属性来避免更新未渲染的部分。

    Hi kolossus..,感谢您的回复,很抱歉,我忘了将禁用的选项卡绑定到bean变量。现在我做了,但问题是选项卡没有正确更新,请查看问题的新编辑。@Kishor,“没有正确更新”是什么意思?它没有反映出变化?你为什么不更新你感兴趣的标签呢?你试过这个例子吗??它启用选项卡内容,但不启用选项卡标题(单击以打开选项卡的位置)。标题已冻结/禁用。你只要试一下就明白了。请阅读原始问题。它已经在那里了,OP不希望这样。但是,您可以在accordionPanel中使用dynamic=“true”属性来避免更新未渲染的部分。我已经尝试了您的示例,我发现ID只提供给选项卡区域,而不是选项卡标题,这就是为什么它不更新选项卡标题,您需要全部更新,或者删除css类(.ui helper hidden)javascripts的表单选项卡标题。
       <p:tab id="tab2" title="Second Tab" disabled="#{tabBean.disableTab}">
           <h:outputText value="Contents of Tab2"/> 
       </p:tab>
    
       <p:tab id="tab1" title="First Tab">
          <h:outputText value="Contents of Tab1"/>
             <h:form>
               <p:commandButton value="Enable Tab2" oncomplete="accordionPanelWidget.select(2)" action="#{tabBean.buttonAction}" update=":accordionPanelId:tab2"/>
            </h:form>
       </p:tab>