на моей странице jsf я использую составной компонент, который в основном является полем ввода.Мой компонент поддержки содержит список, содержащий все разрешенные языки, на которые пользователю разрешено входить.При отправке я хочу проверить вводимые пользователем данные на основе этого списка.
Поэтому мне нужно передать этот список валидатору, потому что получение этого списка занимает много времени, поэтому я делаю это, когда инициализируется компонент поддержки.Но я борюсь здесь.
Мой составной компонент выглядит так:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute name="value" required="true" />
<composite:editableValueHolder name="nameValidator" targets="value" />
</composite:interface>
<composite:implementation>
<h:panelGroup>
<h:inputText id="value" value="#{cc.attrs.value}" />
</h:panelGroup>
</composite:implementation>
</html>
Мой валидатор выглядит так:
@FacesValidator("OcrLanguageValidator")
public class OcrLanguageValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
Object param1 = context.getExternalContext().getRequestParameterMap().get("param1");
if (param1 != null) {
}
}
}
ИЯ использую такой компонент на моей странице jsf:
<h:form id="newParameter" styleClass="form-horizontal">
<uiComps:testCC value="test" >
<f:validator validatorId="OcrLanguageValidator" for="nameValidator" />
<f:param name="param1" value="blub" />
</uiComps:testCC>
</h:form>
Когда вызывается метод проверки, param1
всегда равен нулю.Как я могу достичь своей цели?Я использую Mojarra 2.3.
Edit из-за возможного дублирования: я не думаю, что это дублирование.Я использую составной компонент здесь.Без этого есть способ сделать это.Но мне не нравится идея добавления специального атрибута к компоненту только потому, что он нужен мне в одном случае, а не в других.Надеюсь, что может быть лучшее решение этой проблемы.