如何根据facelets中的条件进行渲染?

时间:2010-07-13 14:05:13

标签: jsf facelets

我在没有Tomahawk或其他libs的情况下使用JSF 1.2 + Facelets + Apache My Faces。我使用自定义容器。我有一个方案要实现,但我不确定如何使用JSF + Facelets实现相同。这些是我的问题:感谢您提供的任何帮助。谢谢!

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

1)在Facelets中使用模板是否必须? 2)如何使用Facelets实现if和else条件?可能吗? 3)这是正确的吗? - Backing Bean构造函数总是返回到请求所针对的页面 - 这一点很容易混淆,因为构造函数无法返回“String” 4)如何将用户发送到不同的页面或将代码放在何处以将其发送到差异页面?

1 个答案:

答案 0 :(得分:2)

这不应该在视图侧进行,而是在控制器侧进行。通常的做法是使用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);
    }
}