2013-08-13 5 views
2

У меня есть слушатель, который слушает ошибки проверки JSF, и мне нужно иметь возможность отключать определенную функциональность в зависимости от определенных контекстов.Передача информации через JSF FacesContexts

В моем слушателе у меня есть только SystemEvent, поэтому этот слушатель не является специфичным для компонента, мне было интересно, есть ли способ передать любую другую информацию, возможно, что-то вроде атрибутов в FacesContext? ... так что позже в прослушивателе проверки я смог проверить контекст для атрибута, который я мог бы установить в JSF.

Т.е

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

потом

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

... Кажется, как выстрел в темноте, я просто пытаюсь увидеть, если Theres любой контекстный способ передать информацию обратно, прежде чем я переписать архитектуру.

ответ

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

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

Обновлено Исправлено неправильное использование контекста, чтобы получить атрибут, чтобы получить его из компонента.

+0

Привет, спасибо за ваш ответ. Я должен был быть более ясным, я не нахожусь в рамках обычного валидатора; Я в слушателе, который слушает проверку, терпит неудачу. По сути, я искал что-то похожее на ваше решение, но добавлял атрибут к контексту, а не к определенному компоненту/валидатору. Кроме того, если вы добавите атрибут в валидатор, вам действительно нужно будет от него извлечь его из компонента; ie (String) component.getAttributes(). get ("FIELD_NAME") –

+0

Ух, спасибо, что поймали это. Я обновлю ответ, чтобы хотя бы отразить правильный код, даже если он может не работать для ваших конкретных потребностей. –

Смежные вопросы