Primefaces RequestContext.getCurrentInstance()。reset for selectonemenu

时间:2015-09-09 09:44:36

标签: java html jsf jsf-2 primefaces

我使用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;

有什么想法吗?什么是正确的重置路径?

由于

2 个答案:

答案 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:tabtable(根本不是JSF组件)不是这些组件之一。

仅在您的代码中实施javax.faces.component.NamingContainer的代码p:tabViewh:form

因此,您的p:selectOneMenu ID将只是tabview1:frm1:select1

RequestContext.getCurrentInstance().reset("tabview1:frm1:select1");

您可以从浏览器的Inspect Element中查找它。

enter image description here

并记住在reset后更新组件,您可以使用Requestcontext

从ManagedBean本身进行更新
RequestContext.getCurrentInstance().update("tabview1:frm1:select1");