【问题标题】:How to disable/enable h:datatable如何禁用/启用 h:datatable
【发布时间】:2012-11-05 11:24:30
【问题描述】:

我有一个带有 h:selectOneMenu 和数据表的页面。我想根据我在 h:selectOneMenu 中选择的内容来加载/渲染/启用我的 h:datatable。这可能吗?

这里有一些代码

<tr class="portlet-table-body" >
<td width="20%" class="porlet-padding-left"><h:outputText value="${operatorProgramBundle.NextGenerationWorkflow}" /></td>
<td width="450px">
    <h:selectOneMenu id="ngw" styleClass="portlet-dropdown"  value="${CRUDOperatorProgram.selectedNextGenWorkflow}">
        <f:selectItems value="${CRUDOperatorProgram.nextGenWorkflowList}" />
    </h:selectOneMenu>
</td>

<h:dataTable id="DispatchConfigurationCustom" columnClasses="portlet-table-same portlet-table-cell"
headerClass="portlet-table-same portlet-table-cell" value="#{CRUDOperatorProgram.workflowConfigList}" var="workflowConfig" width="100%" >
<h:column>
    <f:facet name="header">
        <h:outputText value="Include" />
    </f:facet>
    <h:selectBooleanCheckbox id="includeInd" value="#{workflowConfig.isIncludedInd}"/>
</h:column>
<h:column>
    <f:facet name="header">
        <h:outputText value="Automate" />
    </f:facet>
    <h:selectOneRadio id="onOff" value="#{workflowConfig.isAutomatedInd}">
        <f:selectItem id="onButton" itemLabel="On" itemValue="0" />
        <f:selectItem id="offButton" itemLabel="Off" itemValue="0" />
    </h:selectOneRadio>
</h:column>
</h:dataTable>

【问题讨论】:

  • 是的,在 JSF 2 中可以在 &lt;h:selectOneMenu&gt; 中使用 &lt;f:ajax update="DispatchConfigurationCustom"&gt; 标记。如果您使用的是 JSF 1.2,则需要像 RichFaces 3 一样处理 ajax 交互的第三方库。
  • @ luiggimendoza是可以拥有未禁用的DataTable,然后选择从H:Selectonemenu的某些特定的东西时,可将DataTable启用?你介意给我举个例子吗?
  • “启用/禁用”在 HTML &lt;table&gt; 元素(由 &lt;h:dataTable&gt; 组件生成)的上下文中是一个奇怪的术语。你不是说“显示/隐藏”吗?此外,您使用的是 JSF 1.x 还是 2.x?您放置代码的方式(这在语法上对 JSP 上的 JSF 1.x 有效)和“portlet”这个词闻起来很像旧版 JSF 1.x portlet。
  • 好的。您使用的是 JSF 1.x 还是 2.x?在任何人发布答案之前知道这一点非常重要。由于新的内置 ajaxical 功能,许多事情在 JSF 2.x 中以不同方式和更优雅的方式完成。

标签: jsf datatable


【解决方案1】:

鉴于您使用的是 JSF 2.x,只需在下拉列表中使用 &lt;f:ajax&gt; 来更新数据表的最近父级,并让数据表的 rendered 属性评估 truefalse 相应地取决于在选定的项目上。

假设您只想在选择项目值“foo”时显示数据表,这样做:

<h:selectOneMenu value="#{bean.selectedItem}">
    <f:selectItems value="#{bean.availableItems}" />
    <f:ajax render="table" />
</h:selectOneMenu>

<h:panelGroup id="table">
    <h:dataTable rendered="#{bean.selectedItem == 'foo'}">
        ...
    </h:dataTable>
</h:panelGroup>

【讨论】:

  • 所以当我查看文档时,我发现 h:datatable 没有与之关联的“渲染”属性。我猜 f:ajax render="table" 允许使用该属性?
  • 我不明白你的意思。绝对是listed 作为文档中的标签属性。
  • 哦,哇,我一定是看错了文档!因此,此代码将在进行特定选择时呈现数据表。另外,如果我取消选择该“特定”选择怎么办。我假设它不会取消渲染吗?本质上,我想要做的是制作一个带有默认输入区域的页面,其中包含一个下拉菜单,其中包含选择以及“自定义”选择。当您从下拉列表中选择“自定义”时,将显示数据表。如果选择了“自定义”然后您取消选择它,我希望数据表消失等等,例如禁用/启用。第二部分甚至可能吗?
  • 好像我实际上在使用 a4j 和 a4j:ajax 将不起作用。有什么想法吗?
  • 它应该也适用于&lt;a4j:ajax&gt;。您的问题是在其他地方引起的。根据目前提供的信息很难判断。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2014-04-27
  • 2012-12-18
相关资源
最近更新 更多