如何通过在h上选择一个新值来隐藏组件:selectOneMenu?

时间:2013-04-02 15:23:57

标签: jsf-2

我有一个h:selectOneMenu的页面,当我在dataTable选择新值时,我想要隐藏h:selectOneMenu,而某些bean属性值会更新。我正在尝试不同的东西,我可以通过重新加载页面来隐藏dataTable。我在onsomething属性上使用了一些JavaScript代码尝试了这个。在这种情况下,虽然我使用t:saveState(我还需要bean的 view 范围),但这些bean属性值会消失。

这是一个澄清这一点的例子:

<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.doSearchBean.search更改为true。当我在dataTable上选择新值时如何隐藏h:selectOneMenu id="list"

编辑:

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

提前致谢!

1 个答案:

答案 0 :(得分: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命名约定,这是您应该尽快纠正的事情。