假设我有一个管理用户的应用程序。您可以添加新用户,删除他们,编辑详细信息等。每个用户都有一个ID,并在URL上具有详细信息页面,如下所示:
..../user/detail.jsf?id=123
现在,如果ID 123的用户不存在怎么办?我认为自然反应将是404标准错误。与您在URL中打错字(例如/user/dtail.jsf)时所输出的完全相同。所以问题是:有这种方法吗?
还是这个反应(404)合适?
谢谢。
只需将验证器附加到id视图参数,如果验证失败,则在响应上设置错误代码404。
例如
考虑一下这个简单的Facelet:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <f:metadata> <f:viewParam id="id" name="id" value="#{myBean.id}" validator="#{myBean.validate}"/> </f:metadata> <h:body> <h:outputText value="#{myBean.id}"/> </h:body> </html>
以及以下辅助bean:
@ManagedBean @ViewScoped public class MyBean { private Long id; public void validate(FacesContext context, UIComponent component, Object object) { // Do some validation // And if failed: context.getExternalContext().setResponseStatus(404); context.responseComplete(); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } }