Я пытаюсь поместить пользовательское сообщение перед каждым из моего InputText, используя h: message.
Моя проблема в том, что я не могу найти способ установить сообщение.
Это HTML:
<h:inputText id="_inputValue" binding="#{bean.inputtext}"/>
<h:message for="_inputValue" binding="#{bean.message}"/>
<h:commandButton value="validate" actionListener="#{bean.action}"/>
А в управляемом бине я пробовал разные способы и до сих пор не показывал сообщение:
Получить компонент HtmlInput и установить его ValidatorMessage,
public void action(ActionEvent event)
{
inputtext.setValidatorMessage("ERROR");
}
Затем я попытался установить сообщение, используя его clientID.
public void action(ActionEvent event)
{
//Get message id
String messageId = message.getClientId();
//Get context
FacesContext context = FacesContext.getCurrentInstance();
//Create message
FacesMessage fmessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Message:", "this is an error message !");
//Add message
context.addMessage(messageId, fmessage);
}
На этом этапе я удивляюсь, что не существует простого способа установить сообщение в h: message в java после проверки бина.
Я использую JSF 2.2
РЕШЕНИЕ:
После получения комментариев было найдено следующее решение,
- Следуйте обычной проверке JSF
- Использование валидатора.
<h:inputText id="_inputValue" binding="#{bean.inputtext}" validator="validatorName"/>
<h:message for="_inputValue" binding="#{bean.message}"/>
<h:commandButton value="validate" actionListener="#{bean.action}"/>
Затем валидатор создаст FacesMessage и использует его в объявлении броска. бросить новое ValidatorException (сообщение). Компонент сообщения jsp отобразит сообщение валидатора, поскольку оно связано с вводимым текстом с помощью for = _inputText.
@FacesValidator("validatorName")
public class MyValidator implements Validator
{
//[JOB OVERRIDE]
@Override public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException
{
FacesMessage message = new FacesMessage("type of validation that failed.", "detailed cause of failure.");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(message);
}
}
ВНИМАНИЕ:
Будьте осторожны, так как валидатор не является Бином и не зарегистрирован в CDI, поэтому мы используем validator = "validatorName" вместо validator = "# {validatorName}".
В случае, если валидатор преобразуется в bean-компонент, удалите @FacetValidator и замените его на @Named ("validatorName"), а затем используйте на странице jsp validator = "{validatorName}".