JSF: Как создать исключение из facelet

#jsf #facelets #jsf-2.3

Вопрос:

Есть ли способ создать исключение из facelet? Предыстория: У меня есть компонент, использующий в качестве параметра настроенный конвертер. Поэтому я называю компонент как

 @Named @RequestScoped public class CustomConverter implements Converterlt;Stringgt; ...  
 ... lt;ui:param  name="pConverter"  value="#{customConverter}" /gt; ...  

Но когда в значении параметра есть опечатка, например

 ... lt;ui:param  name="pConverter"  value="#{custoMConverter}" /gt; lt;!-- custoMConverter instead of customConverter --gt; ...  

следовательно, преобразователь не работает, но никаких исключений не возникает. Теперь я хотел бы создать исключение из компонента, если в таком случае конвертер пуст. Как это сделать?

Почему несуществующий элемент вообще не создает исключения?

 lt;h:outputText value="#{fooBean.foo}" /gt;  

Нет никаких исключений, если боб fooBean не существует. Почему нет?

Заранее спасибо.

Ответ №1:

Я нашел решение.

 @Named @ApplicationScoped public class ApplicationBean {  public final void checkExistenceAndThrow(final Object o) {  if (Objects.isNull(o)) {  throw new NullPointerException();  }  } }  

Затем в компоненте проверьте наличие преобразователя:

 lt;h:outputText  value="#{applicationBean.checkExistenceAndThrow(pConverter)}"  style="display: none;" /gt;  

Таким образом, создание исключения делегируется компоненту.