HtmlOutputTag
представляет тег, а не компонент. Скорее используйте HtmlOutputText
. Затем вы можете просто установить свойство value
точно так же, как в реальном компоненте на странице JSF. Если вам нужно, чтобы он был ValueExpression
, а не необработанным value
, то вам нужно создать его, используя ExpressionFactory#createValueExpression()
. Вот пример начала:
HtmlOutputText text = new HtmlOutputText();
text.setValueExpression("value", createValueExpression("#{bean.property}", String.class));
где удобный метод createValueExpression()
здесь выглядит так:
private static ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getExpressionFactory()
.createValueExpression(context.getELContext(), valueExpression, valueType);
}
скрыть это далеко в некотором служебном классе, чтобы вам не нужно было повторять весь этот код снова и снова;) Аргумент valueType
, очевидно, должен представлять фактический тип свойства.
Окончательный результат на странице JSF должен выглядеть следующим образом:
<h:outputText value="#{bean.property}" />
Тем не менее, в зависимости от функциональных требований, действительно, могут быть лучшие и более чистые способы решения функциональных требований. Если хотите, вы можете подробнее рассказать об этом, чтобы в случае необходимости мы могли предложить более эффективные способы.