Вопрос

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

HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();

Какое же свойство HtmlOutputTag я должен установить, чтобы установить содержимое HtmlOutputTag?

Это было полезно?

Решение

Тем 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}" />

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top