我使用Primefaces 5,我想将selectonemenu重置为默认值。
我有一个分页结构,所以:
<p:fragment>
<p:tabView id="tabview1" cache="false" dynamic="true" >
<p:tab title="One" id="tab1">
<ui:include src="tab1.xhtml" />
</p:tab>
<p:tab title="Two" id="tab2" >
<ui:include src="tab2.xhtml"/>
</p:tab>
</p:tabView>
</p:fragment>
然后,tab1.xhtml就是这样:
<h:form id="frm1">
<table id="tbl1">
<tr>
<td>
<p:selectOneMenu id="select1"
value="#{bean.test}"
valueChangeListener="#{bean.setXXX}"
var="var1" >
<f:selectItem itemLabel="Select..."
itemValue="#{null}" />
<f:selectItems var="var2"
value="#{bean.list}"
itemLabel="#{var2.label}"
itemValue="#{var2}"/>
<p:ajax process="@this" event="change" update="@this"/>
</p:selectOneMenu>
</td>
</tr>
</table>
</h:form>
我相信重置我的selectonemenu我可以用我的setXXX方法写: 。RequestContext.getCurrentInstance()复位(&#34; tabView1:TAB1:Frm1中:TBL1:SELECT1&#34);
没有工作,我有兴奋&#34;引起:java.lang.IllegalArgumentException&#34;
有什么想法吗?什么是正确的重置路径?
由于
答案 0 :(得分:0)
据我所知,重置的意思是再次确定选择菜单的默认值,不是吗?
在这种情况下,事情很简单。您只需要修改所选项目的当前值。因此,在你的Backing Bean&#34; bean&#34;中,在setXXX方法中只需重置属性=&#34;#{bean。 test }&#34;的原始值。
当ajax更新组合时,它将刷新最近的默认值测试。
答案 1 :(得分:0)
您使用tabView1:tab1:frm1:tbl1:select1
引用该组件。
其中有2个错误。
在JSF / Primefaces中,实现javax.faces.component.NamingContainer的组件是将其id附加到内部组件的唯一组件。
所以p:tab
和table
(根本不是JSF组件)不是这些组件之一。
仅在您的代码中实施javax.faces.component.NamingContainer
的代码p:tabView
和h:form
。
因此,您的p:selectOneMenu
ID将只是tabview1:frm1:select1
RequestContext.getCurrentInstance().reset("tabview1:frm1:select1");
您可以从浏览器的Inspect Element中查找它。
并记住在reset
后更新组件,您可以使用Requestcontext
RequestContext.getCurrentInstance().update("tabview1:frm1:select1");