установить пользовательское сообщение в ах: сообщение - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь поместить пользовательское сообщение перед каждым из моего 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}".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...