2

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

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

IE

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

然后稍后

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

...似乎是在黑暗中拍摄,我只是想看看在我重写架构之前是否有任何上下文方式来传回信息。

4

1 回答 1

0

您可以<f:attribute>在输入组件中包含一个标签,然后通过以下方式在验证器中检索属性值 FacesContext.getCurrentInstance().getAttributes().get(attrname);

标签的语法应该是<f:attribute name="attrname" value="#{ELexpr}">

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

公共类 NameValidator 实现 Validator
{
    @覆盖
    公共无效验证(FacesContext 上下文,UIComponent 组件,对象值)抛出 ValidatorException
    {
        对象值 = (String)component.getAttributes().get("FIELD_NAME");
        // 验证东西
    }
}

和相应的jsf

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

更新 修复了错误使用上下文来获取属性以从组件中获取它的问题。

于 2013-08-13T23:34:00.407 回答