3

我有一个包含 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 值后,操作员按下 Refresh 按钮刷新页面,包括p:editor. (我不能简单地刷新p:editor使用 AJAX,因为它不能正确重新渲染,至少在 PF 2.2.1 中是这样。)

似乎我应该能够在selectOneMenu值更改时自动完成页面刷新,但我一直无法想出可以做到这一点的属性和事件的组合。我已经尝试了onchange="submit();",immediate="true"valueChangeListener,selectOneMenu以及execute="@all/@form",事件的各种组合,render="@all/@form"f:ajax都无济于事。我目前的解决方法是显示一条消息,要求用户在更改selectOneMenu选择时按下刷新按钮 - 非常狡猾。

4

2 回答 2

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>
于 2012-06-22T04:07:49.450 回答
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 功能。

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

于 2012-06-21T08:43:26.940 回答