0

我有一个带有 a 的页面,当我在某些 bean 属性值更新时选择一个新值时h:selectOneMenu,我想隐藏 a 。我正在尝试不同的事情,我可以通过重新加载页面来隐藏。我已经在属性上使用一些 JavaScript 代码进行了尝试。在这种情况下,尽管我使用了这些 bean 属性值(并且我还需要 bean 的视图范围),但这些 bean 属性值会消失。dataTableh:selectOneMenudataTableonsomethingt:saveState

这是一个小例子来澄清这一点:

<h:selectOneMenu id="list" value="#{Bean.id}">       
    <f:selectItems value="#{Bean.List}" var="element" itemLabel="#{element.name}" itemValue="#{element.id}"/>
    <t:saveState value="#{Bean.id}"/>
    <f:ajax listener="#{Bean.populateBean}" render=":form:period" event="change"/>
</h:selectOneMenu>

<h:selectOneMenu id="period" value="#{Bean.period}">
<f:selectItems value="#{Bean.listaPeriod}" var="period" itemLabel="#{period[1]}" itemValue="#{period[0]}"/>
     <t:saveState value="#{Bean.period}"/>
</h:selectOneMenu>

<h:commandButton id="search" action="#{Bean.doSearch}"></h:commandButton>

<t:dataTable id="data" value="#{Bean.configList}" rendered="#{Bean.search}"
     <t:column>
     ...
</t:dataTable>

Bean.doSearch更改Bean.searchtrue. dataTable当我选择新值时如何隐藏h:selectOneMenu id="list"

编辑:

简而言之,搜索按钮呈现表格,当我在“列表”下拉列表中选择一个新值而不重新加载页面时,我想隐藏该表格。现在,<f:ajax>仅用于重新呈现“期间”下拉值。

提前致谢!

4

1 回答 1

0

您的问题很难理解,但是如果您想在下拉菜单触发的 ajax 请求上将数据表从视图中踢出,您需要将其包含在视图中始终存在的组件中,以便 HSF 知道在 ajax 时要重新呈现什么通话成功结束:

<h:panelGroup id="rerender">
    <t:dataTable rendered="#{bean.condition}" ...>
        ....
    </t:dataTable>
<h:panelGroup>

当然,要使其正常工作,您应该指定要重新渲染的组件的 id:

<h:selectOneMenu ...>
    ...
    <f:ajax listener="#{bean.populate}" render="rerender" />
</h:selectOneMenu>

请注意,如果下拉组件和数据表组件属于同一表单,则无需指定后者父级的绝对 id。另请注意,指定事件是多余的,因为它已经默认为正确的。最后,当您使用 JSF 2.x 时,不需要使用保存状态,只需将表单数据的值绑定到视图范围的 bean。

最后要注意的是您没有遵守 Java 命名约定,您应该尽快更正这一点。

于 2013-04-02T18:04:33.750 回答