如何在selectOneMenu选择中刷新JSF中的页面?

时间:2012-06-20 19:31:54

标签: jsf-2 primefaces

我有一个包含PrimeFaces(2.2.1)编辑器组件,刷新按钮和selectOneMenu的页面,其选择会影响编辑器的内容,如下所示:

<p:editor id="uploadedText" value="#{facilityDataUploadBean.uploadedText}"
          width="600" height="180" disabled="true" controls="" />
<h:commandButton value="Refresh" immediate="true" />
<h:selectOneMenu id="skipLines" styleClass="dropdown"
                 value="#{facilityDataUploadBean.skipLines}">
    <f:selectItems value="#{facilityDataUploadBean.skipLinesList}" />
    <f:ajax listener="#{facilityDataUploadBean.importParameterChanged}" />
</h:selectOneMenu>

facilityDataUploadBean.importParameterChanged更新facilityDataUploadBean.uploadedText。更改selectOneMenu值后,操作员按“刷新”按钮刷新页面,包括p:editor的内容。 (我不能简单地使用AJAX刷新p:editor,因为它不能正确地重新渲染,至少在PF 2.2.1中。)

似乎我应该能够在selectOneMenu值更改时自动完成页面刷新,但我无法提出将要执行此操作的属性和事件的组合。我在onchange="submit();"上尝试了immediate="true"valueChangeListenerselectOneMenu的各种组合,以及execute="@all/@form"上的render="@all/@form"f:ajax 1}}事件,一切都无济于事。我目前的解决方法是显示一条消息,要求用户在更改selectOneMenu选项时按下“刷新”按钮 - 非常好看。

2 个答案:

答案 0 :(得分:5)

window.location.replace(window.location.href)事件中调用submit()而不是onchange,如:

<h:selectOneMenu id="skipLines" ... onchange="window.location.replace(window.location.href);">
    <f:selectItems ... />
    <f:ajax ... />
</h:selectOneMenu>

答案 1 :(得分:1)

请尝试onchange="window.location.reload();"方法:

<h:selectOneMenu id="skipLines" ... onchange="window.location.reload();">
    <f:selectItems ... />
    <f:ajax ... />
</h:selectOneMenu>

这在我的环境中工作得很好(GF 3.1.1,PF 3.2),但请注意,有可能会中断某些ajax功能。

希望有这种帮助,玩得开心!