Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何";扔;JSF2404错误?_Java_Web Applications_Jsf 2 - Fatal编程技术网

Java 如何";扔;JSF2404错误?

Java 如何";扔;JSF2404错误?,java,web-applications,jsf-2,Java,Web Applications,Jsf 2,假设我有一个管理用户的应用程序。您可以添加新用户、删除用户、编辑详细信息等。每个用户都有na ID,URL上有详细信息页面,如下所示: ..../user/detail.jsf?id=123 现在,如果ID为123的用户不存在,该怎么办?我认为自然反应是404标准误差。与在URL中键入某些内容(如/user/dtail.jsf)时输出的内容完全相同。所以问题是:有这样的方法吗 或者这个反应(404)合适吗 谢谢。只需将验证程序附加到id view参数,如果验证失败,请在响应上设置错误代码404

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

..../user/detail.jsf?id=123
现在,如果ID为123的用户不存在,该怎么办?我认为自然反应是404标准误差。与在URL中键入某些内容(如/user/dtail.jsf)时输出的内容完全相同。所以问题是:有这样的方法吗

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


谢谢。

只需将验证程序附加到id view参数,如果验证失败,请在响应上设置错误代码404

e、 g

考虑这个简单的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>
(我最后在这里搜索类似的东西,但这里有另一个我在类似问题上使用的模式)

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

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


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

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

在JSF2中有一个。不再需要铸造了!:)顺便说一下,还有一个.Nice,我确实在ExternalContext中浏览了方法列表,但完全没有看到。谢谢更新了答案,因为这是更简单的解决方案。@BalusC:谢谢,这正是我需要的。谢谢你的解决方案,它很有帮助。没有BalusC解决方案,我使用转发到不存在的位置,这产生了几乎相同的结果。请帮助我,因为它显示了错误页面。下面是代码:((HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse()).sendError(HttpServletResponse.SC\u未找到);
@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;
    }

}
//Inside "SomeManagedBean"
  public String getParam()
  {
    String value = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("key");
    if(value == null)
      return "key not Exist";
    else
      return value;

  }