这是我使用的代码:
request.jsf
<h:form>
<!-- form inputs ... -->
<h:commandButton id="btnStart" value="START" action="#{bean.handleForm}">
<f:ajax execute="@form" render="message" />
</h:commandButton>
</h:form>
当我单击btnStart
按钮时,表单将被提交并由我的bean正确处理。不幸的是,浏览器网址栏仍显示http://myhost.com/request.jsf
,而内容显示#{bean.handleForm}
返回的结果。
如何正确更新网址栏?
答案 0 :(得分:2)
这是因为您的表单正在提交到当前URL,而JSF只是更改了响应的资源。如果您想将URL更改为新资源之一,则需要告知Web浏览器发送新请求。您可以通过执行重定向来实现。在JSF 2中,将faces-redirect=true
作为查询字符串添加到结果中。
public String handleForm() {
// ...
return "nextpage?faces-redirect=true";
}
或者,如果它确实是一个非幂等请求,那么我会坚持使用相同的页面,只是有条件地在同一页面中显示结果,如果需要,可以通过包含。然后,您的操作方法可以返回null
或void
。