Как установить значение HtmlOutputTag в JSF? - PullRequest
2 голосов
/ 13 марта 2010

Я хочу динамически создавать элементы управления в моем бине. Я использую JSF 2.0

HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();

Теперь, какое свойство HtmlOutputTag следует установить для установки содержимого HtmlOutputTag?

Ответы [ 2 ]

5 голосов
/ 14 марта 2010

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}" />

Тем не менее, в зависимости от функциональных требований, действительно, могут быть лучшие и более чистые способы решения функциональных требований. Если хотите, вы можете подробнее рассказать об этом, чтобы в случае необходимости мы могли предложить более эффективные способы.

1 голос
/ 13 марта 2010

Как и обычно , мой совет - не добавлять / удалять компонент динамически. Решите вашу проблему другим способом:

  • Переключение видимость компонентов
  • Перепривязать данные , принадлежащие компоненту

Динамическое добавление / удаление компонента всегда является источником проблем, и есть вероятность, что вы можете сделать это гораздо проще.

Компонент outputText прост в использовании:

<h:outputText value="#{BackingBean.myProperty}"/>

И вы определяете метод получения / установки для myProperty в своем компоненте поддержки. Если вы действительно хотите сделать это программно (что я не рекомендую, если у вас нет веских аргументов), вот пример с динамической таблицей.

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