JSF:如何从 facelet 中抛出异常

JSF: How to throw an exception from within a facelet

有没有办法从 facelet 中抛出异常?背景:我有一个使用自定义转换器作为参数的组件。所以我称该组件为

@Named
@RequestScoped
public class CustomConverter implements Converter<String>
...
...
<ui:param
  name="pConverter"
  value="#{customConverter}" />
...

但是当参数值有错别字时,例如

...
<ui:param
  name="pConverter"
  value="#{custoMConverter}" /> <!-- custoMConverter instead of customConverter -->
...

转换器因此不工作,但没有抛出异常。现在,如果在这种情况下转换器为空,我想从组件内部抛出异常。怎么做?

为什么一个不存在的元素根本不抛出异常?

<h:outputText value="#{fooBean.foo}" />

bean fooBean 不存在也不例外。为什么不呢?

提前致谢。

我找到了解决办法。

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

然后在组件中检查转换器是否存在:

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

所以异常的抛出委托给了bean