我的页面通过其ID显示了一个项目:item.xhtml?id=xxx
如果未提供ID,则会显示所有项目的列表。
在同一页面中,有一个用于更新项目字段的表单。
使用<f:viewParam>
和隐藏的输入,我可以在提交表单时再次显示item.xhtml?id=xxx
。但是如果发生验证错误(我使用Bean验证),则会出现item.xhtml,其中包含所有项目的列表和错误消息。即使发生错误,有没有办法重定向?
PS:为什么jsf会从网址中删除查询字符串?我的意思是,如果呈现的表单操作是/context/page.xhtml?query=string
而不是/context/page.xhtml
,则不存在这些问题。我哪里错了?
答案 0 :(得分:0)
将托管bean放在@ViewScoped
的视图范围内。如果您因某种原因确实需要将bean作为请求作用域,那么您需要将参数传递给<f:param>
。
<h:commandButton value="Submit" action="#{bean.submit}">
<f:param name="paramName" value="#{param.paramName}" />
</h:commandButton>
对于表单操作URL,这是设计使然。您可以通过提供自己的ViewHandler
实施来覆盖此设置,其中您会相应地覆盖getActionURL()
方法。