首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何“抛出”JSF2 404错误?

如何“抛出”JSF2 404错误?
EN

Stack Overflow用户
提问于 2011-02-05 02:41:58
回答 3查看 5.3K关注 0票数 12

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

代码语言:javascript
复制
..../user/detail.jsf?id=123

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

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-05 04:47:17

只需将验证器附加到id视图参数,如果验证失败,则在响应上设置错误代码404。

例如:

考虑一下这个简单的Facelet:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
@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;
    }

}
票数 14
EN

Stack Overflow用户

发布于 2011-04-04 21:32:25

(我最终在这里搜索类似的东西,但这是我在类似问题上使用的另一个模式)

上面的Validation/ExternalContext响应是处理它的一个非常好的方法,或者(因为您已经在上下文中),您可以在解析来自请求的参数时处理错误,并在内部处理它。我认为这更多的是你想要如何在你的流程中处理它,而不是“这是一个更好的解决方案”

代码语言:javascript
复制
//Inside "SomeManagedBean"
  public String getParam()
  {
    String value = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("key");
    if(value == null)
      return "key not Exist";
    else
      return value;

  }

//JSF2.0源代码(something.xhtml) ...

我认为在框架内处理上述内容通常更容易(您不必发送到错误页面并中断流程),但实际上这只是一个架构决策。这两种解决方案都是相似的,只是打破流程或内部处理的问题。无论哪种方式,ExternalContext都是你的朋友。

票数 1
EN

Stack Overflow用户

发布于 2012-03-08 17:38:45

如前所述,您可以从托管bean中获取上下文。我尝试了验证器方法,但对我来说它不适用,因为我使用了两个参数来初始化我的bean,而且我确实想抛出一个404。对我来说,.setResponseStatus没有抛出404页。只是给出了一个非信息性的浏览器页面。所以我改用了responseSendError。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4901710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档