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

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。更改的值后,操作员按下刷新按钮以刷新页面,包括的内容。(我不能仅使用AJAX刷新,因为它在PF 2.2.1中无法重新呈现正确。)

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

2个回答

5

onchange事件中,使用window.location.replace(window.location.href)代替submit(),示例如下:

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

1
偶尔会出现selectOneMenu的更改没有“生效”的情况 - 可能是页面刷新在设置后端bean值的AJAX执行之前发生。但我没有看到它使UI处于不一致状态或显示与后端bean(其为SessionScoped)当前持有的不同值。 - undefined
请注意,此解决方案还避免了证书选择(可能是想要的或不想要的)。 - undefined

3
请尝试使用以下IT相关的方法: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功能。

希望这可以帮到你,玩得开心!


1
当我这样做时,我得到了与这个问题抱怨的相同对话框。然而,解决方案是使用window.location.replace(window.location.href)而不是window.location.reload(),这是这个问题的答案提示我的。 - undefined
很高兴听到你找到了适合你的解决方案!干杯! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接