【问题标题】:Primefaces RequestContext.getCurrentInstance().reset for selectonemenuPrimefaces RequestContext.getCurrentInstance().reset for selectonemenu
【发布时间】:2015-12-05 05:23:27
【问题描述】:

我使用 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().reset("tabView1:tab1:frm1:tbl1:select1");

不起作用,并且我有异常“Caused by: java.lang.IllegalArgumentException”

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

谢谢

【问题讨论】:

    标签: java html jsf jsf-2 primefaces


    【解决方案1】:

    据我了解,重置的意思是再次为选择菜单建立默认值,不是吗?

    在那种情况下,事情就很简单了。您只需要修改所选项目的当前值。因此,在您的 Backing Bean“bean”中,在 setXXX 方法中只需重置属性 =“#{bean.test}”的原始值。

    当 ajax 更新组合时,它会刷新最近的默认值测试。

    【讨论】:

    • 使用哪个代码?我想将我的 selectonemenu 设置为“选择...”
    • 在你的方法 setXXX 你应该重置你的测试值:例如 test = new Test();
    【解决方案2】:

    您使用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");
    

    您可以从浏览器的检查元素中查找它。

    记得在 reset 之后更新组件,您可以使用 Requestcontext 从 ManagedBean 本身进行更新

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

    【讨论】:

    • 好的,谢谢您的详细信息。我试过了,没有异常,但我的选择没有重置。现在我解决了在 bean 类中添加对象绑定
    • 就像我说的,您必须在使用RequestContext 重置后更新组件。使用binding 重置也可以正常工作。
    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2013-08-14
    • 2011-11-27
    相关资源
    最近更新 更多