【问题标题】:How to render based on conditions in facelets?如何根据 facelets 中的条件进行渲染?
【发布时间】:2011-03-15 08:32:23
【问题描述】:

我正在使用没有 Tomahawk 或其他库的 JSF 1.2 + Facelets + Apache My Faces。我使用定制的容器。我有一个场景要实现,但我不确定如何使用 JSF + Facelets 来实现同样的效果。这些是我的问题:感谢您提供的任何帮助。谢谢!

场景:我只有一页+一个支持bean,默认情况下,请求只发送到一页,所以一切正常。一旦请求到来,我会根据 backing bean 中的一些数据来确定是否应该允许用户查看该页面。如果他不应该,我应该将用户发送到其他页面或错误页面。

1) 在 Facelets 中必须使用模板吗? 2) 如何使用 Facelets 实现 if 和 else 条件?可能吗? 3) 这是正确的吗?- Backing Bean 构造函数总是返回到请求已经到来的页面-这个有点令人困惑,因为构造函数不能返回“字符串” 4) 我如何将用户发送到不同的页面或在哪里放置代码以将他发送到差异页面?

【问题讨论】:

    标签: jsf facelets


    【解决方案1】:

    这不应该在视图端进行,而应该在控制器端进行。通常的做法是为此使用Filter。创建一个implements Filter 的类,并在doFilter() 方法中基本上执行以下(伪)操作:

    if (request meets conditions) {
        chain.doFilter(request, response);
    } else {
        response.sendRedirect(errorPageURL);
        // or response.sendError(statusCode, message);
    }
    

    您也可以在 ExternalContext 的帮助下在 bean 的构造函数中处理重定向,但这并不是真正适合的地方。

    public Bean() {
        if (request does not meet conditions) {
            FacesContext.getCurrentInstance().getExternalContext().redirect(errorPageURL);
            // Or externalContext.responseSendError(statusCode, message);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 2020-11-07
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 2021-06-13
      • 2021-07-27
      • 1970-01-01
      • 2022-07-05
      相关资源
      最近更新 更多