1

我有一个页面,它以 id 作为 url 参数并使用它来获取对象并显示有关它的数据。在这个页面上,我们有一个包含文件上传组件的模式,所以我们不能使用 ajax 来处理保存。相反,我们这样做:

    <rich:modalPanel domElementAttachment="parent" id="profilePanel" styleClass="popUp" resizeable="false" moveable="false" autosized="true" zindex="200" top="-10">
        <a4j:form enctype="multipart/form-data" id="profilePanelFormId">
            <q:box title="Edit Advocacy Profile" width="width6x" wantFocus="true">
                <s:div id="profilePanelForm">
                    <rich:messages rendered="#{messagesUtil.errorsExist}"/>
                    <a4j:include viewId="/panel/advocacy/advocateProfileEdit.xhtml"/>
                </s:div>
                <h:commandButton id="cancel" immediate="true" value="Cancel" action="#{advocateManager.cancelEditCommitment}" styleClass="button cancel" tabindex="100"/>
                <h:commandButton id="save" value="Save" action="#{advocateManager.saveCommitment}" styleClass="submit" tabindex="101"/>
            </q:box>
        </a4j:form>
    </rich:modalPanel>

我们在 pages.xml 中填充参数,如下所示:

<page view-id="/advocacy/advocateCommitmentView.xhtml" login-required="true">
    <param name="confirmationCode" value="#{advocateManager.commitmentId}"/>
</page>

到目前为止,一切都很好。我们遇到的问题是当用户点击保存或取消时,url 会在没有必要的 id 参数的情况下被重写。如果用户然后刷新页面,它会抛出错误,因为它没有这个键。有谁知道我如何在不使用 ajax 的情况下调用我的保存方法并仍然保留 url 参数或拦截调用并重新添加参数?

4

2 回答 2

1

放在?includeViewParams=true操作字符串的末尾。

于 2013-03-26T20:25:03.110 回答
0

发生这种情况是因为<h:commandButton/>发布表单,并且表单帖子不包含 URL 中的参数。要添加参数,请创建重定向到同一页面的导航规则:

<navigation from-action="#{advocateManager.saveCommitment}">
    <rule>
        <redirect view-id="/same-page.xhtml" />
    </rule>
</navigation>

进行重定向时,页面参数被编码并添加到 URL。请注意,这需要#{advocateManager.commitmentId}在重定向完成时填充。

于 2013-04-03T13:06:25.273 回答