首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prettyfaces验证

Prettyfaces验证
EN

Stack Overflow用户
提问于 2015-03-12 13:33:55
回答 1查看 653关注 0票数 1

我想用prettyfaces验证我的url,如果对象不存在,我想得到一个HTTP 404。我的网址应该看起来像/code/788?date=13.12.2015

我的prettyfaces看起来如下所示:

代码语言:javascript
复制
<url-mapping id="code">
    <pattern value="/code/#{/[0-9]+/ code: prettyUrlCheckBean.newCode}" />
    <query-param name="date">#{navigationBean.calendarDateAsString}</query-param>
    <view-id value="/content/codes.jsf"/>
    <action>#{prettyUrlCheckBean.checkEntryUrlWithNewCode}</action>
</url-mapping>

当前,该操作将接受bean中的参数,查看数据库中给定日期的代码是否存在,然后重定向到主页(在会话中设置参数)或404页。但是,HTTP代码将是302200,而不是直接的404

我在模式和查询-param中都尝试了验证器,但是在这两种情况下,我都无法访问URL的另一部分,因此无法验证对象是否存在。

我的序言版本是2.0.12.Final。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-17 11:36:31

我认为执行这种验证的最简单的方法是在action方法中进行验证。这里有您需要的所有信息,并且在验证错误的情况下发送404是直接的。为此,我总是使用一个小助手类:

代码语言:javascript
复制
public class FacesRequests {

  public static void sendForbidden() {
    sendStatusCode( 403 );
  }

  public static void sendNotFound() {
    sendStatusCode( 404 );
  }

  private static void sendStatusCode( int status ) {

    FacesContext context = FacesContext.getCurrentInstance();

    try {
      HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
      response.sendError( status );
      context.responseComplete();
    }
    catch( IOException e ) {
      throw new IllegalStateException( "Could not send error code", e );
    }

  }

}

你基本上可以做这样的事情:

代码语言:javascript
复制
public String myActionMethod() {

  boolean valid = ...;
  if( !valid ) {
    FacesRequests.sendNotFound();
    return null;
  }

  // business code here

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

https://stackoverflow.com/questions/29011227

复制
相关文章

相似问题

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