我有一个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.doSearch
将Bean.search
更改为true
。当我在dataTable
上选择新值时如何隐藏h:selectOneMenu id="list"
?
编辑:
简而言之,搜索按钮呈现表格,我只想在“列表”下拉列表中选择新值而不重新加载页面时隐藏该表格。现在,<f:ajax>
仅用于重新呈现“期间”下拉值。
提前致谢!
答案 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命名约定,这是您应该尽快纠正的事情。