通过JSF FacesContexts传递信息

时间:2013-08-13 21:26:55

标签: jsf attributes facescontext

我有一个监听JSF验证失败的监听器,我需要能够根据特定的上下文关闭一个特定的功能。

在我的监听器中我只有SystemEvent,所以这个监听器不是特定于组件的,我想知道是否有任何方法可以传递任何其他信息,也许类似于FacesContext上的属性?...以便稍后在验证监听器中,我可以检查我可以在JSF中设置的属性的上下文。

<f:someContextParam name="turnOff" value="true"/>

然后再

boolean turnOff = (Boolean) FacesContext.getCurrentInstance().someWayToGetAttribute("turnOff");

...在黑暗中看起来像是一个镜头,我只是试图看看在重写架构之前是否有任何上下文传递信息的方式。

1 个答案:

答案 0 :(得分:0)

您可以在输入组件中包含<f:attribute>标记,然后通过FacesContext.getCurrentInstance().getAttributes().get(attrname);

检索验证程序中的属性值

标记的语法应为<f:attribute name="attrname" value="#{ELexpr}">

这是一个半完整的示例验证器:

public class NameValidator implements Validator 
{
    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException
    {
        Object value = (String)component.getAttributes().get("FIELD_NAME");
        // validate stuff
    }
}

和相应的jsf

<h:inputText id="name" value="#{registrationManager.name}">
    <f:validator validatorId="nameValidator" />
    <f:attribute name="FIELD_NAME" value="#{registrationManager.numAttempts}"/>
</h:inputText>

<强>更新 修复了错误使用上下文以获取属性以从组件中获取它的信息。