我有一个页面,它将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>
到目前为止一切顺利。我们遇到的问题是当用户点击保存或取消时,网址会被重写而没有必要的id参数。如果用户然后刷新页面,则会抛出错误,因为它没有此密钥。有没有人知道如何在不使用ajax的情况下调用我的save方法并仍保留url参数或拦截调用并重新添加参数?
答案 0 :(得分:0)
将?includeViewParams=true
放在操作字符串的末尾。
答案 1 :(得分:0)
这是因为<h:commandButton/>
发布了表单,而表单帖子中不包含URL中的参数。要添加参数,请创建重定向到同一页面的导航规则:
<navigation from-action="#{advocateManager.saveCommitment}">
<rule>
<redirect view-id="/same-page.xhtml" />
</rule>
</navigation>
执行重定向时,页面参数会被编码并添加到URL中。请注意,这需要在重定向完成时填充#{advocateManager.commitmentId}
。