Ячейка столбца данных JSF выбирает между outputText и outputLink

Я новичок в JSF, и я пытаюсь создать таблицу данных, которая будет отображать некоторые свойства (первый столбец будет содержать имена свойств, а второй столбец - их значения). Типы свойств могут различаться (String, Long, URI, Calendar и т. д.).

Что я хочу сделать, так это, если тип свойства, например. String, long, boolean и т. д. для вывода значения свойства в виде простого текста (с использованием outputText), но если это URI или ссылка (это настраиваемый тип), чтобы просмотреть его как ссылку.

Это моя текущая страница JSF (показывает все как обычный текст):

        <p:dataTable var="property" 
                     value="#{myBean.properties()}" >
            <p:column headerText="Property" >
                #{property}
            </p:column>

            <p:column headerText="Value">
                <h:outputText value="#{myBean.property(property)}"/>
            </p:column>
        </p:dataTable>

Спасибо!


person kasimoglou    schedule 18.07.2013    source источник
comment
Вы пробовали использовать оба компонента с условиями рендеринга?   -  person danRod    schedule 19.07.2013
comment
Разве вы не можете просто отобразить каждое свойство. Для ссылки вы могли бы что-то вроде <h:outputLink value="#{myBean.property}"/> ?   -  person Andy    schedule 19.07.2013
comment
@danRod И напишите обработанный оператор как: если экземпляр свойства этого, того и того, визуализировать компонент? Это возможно?   -  person kasimoglou    schedule 19.07.2013
comment
@Andy Вы имеете в виду использовать c: foreach и для каждого свойства, чтобы проверить, к какому экземпляру оно относится, и отобразить соответствующий компонент? Я попробую! Спасибо вам обоим за ваши ответы!   -  person kasimoglou    schedule 19.07.2013
comment
Вы должны определить экземпляр каждого свойства? и нет, лол, я не это имел в виду   -  person Andy    schedule 19.07.2013
comment
@Andy Да, буду ли я использовать outputText или outputLink, будет зависеть от того, какой экземпляр является свойством (например, String -> outputText, но Resource -> outputLink). Я думаю, что мне нужно больше изучать JSF, для меня это все китайский язык ( Я бы сказал грек, но я грек!).   -  person kasimoglou    schedule 19.07.2013


Ответы (1)


Просто используйте атрибут rendered для условной визуализации компонентов JSF. В приведенном ниже примере предполагается, что вы переработали property, чтобы он стал полноценным javabean Property со свойствами name и type, где type — это перечисление, содержащее TEXT, LINK, DATE, BOOLEAN и т. д.

<p:column headerText="Value">
    <h:outputText value="#{myBean.property(property.name)}" rendered="#{property.type == 'TEXT'}" />
    <h:outputLink value="#{myBean.property(property.name)}" rendered="#{property.type == 'LINK'}">#{myBean.property(property.name)}</h:outputLink>
    <p:calendar value="#{myBean.property(property.name)}" rendered="#{property.type == 'DATE'}" />
    <p:selectBooleanCheckbox value="#{myBean.property(property.name)}" rendered="#{property.type == 'BOOLEAN'}" />
</p:column>

Смотрите также:

person BalusC    schedule 19.07.2013
comment
Большое спасибо BalusC! Вы так много раз помогали мне своими ответами! - person kasimoglou; 19.07.2013