如何"抛出"JSF2 404错误?

Tom*_*mik 12 java web-applications jsf-2

假设我有一个管理用户的应用程序.您可以添加新用户,删除它们,编辑详细信息等.每个用户都有na ID,并在URL上有详细页面,如下所示:

..../user/detail.jsf?id=123
Run Code Online (Sandbox Code Playgroud)

现在,如果ID为123的用户不存在,会发生什么?我认为自然反应将是404标准误差.当您在URL中输入一些拼写错误时(例如/user/dtail.jsf)与输出完全相同.所以问题是:有这样的方法吗?

或者这个反应(404)可能合适吗?

谢谢.

Arj*_*jms 14

只需将验证器附加到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>
Run Code Online (Sandbox Code Playgroud)

以下支持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;
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 在JSF2中有[`ExternalContext #setResponseStatus()`](http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html#setResponseStatus%28int%29).不再需要施法了!:)顺便说一下,[`ExternalContext#responseSendError()`](http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html#responseSendError%28int,%20java .lang.String%29). (6认同)