2012-03-05 1 views
0

Я нашел похожие вопросы при проведении некоторых исследований, но ни одна из них не решила мою проблему.Динамическое добавление/удаление компонентов в JSF2/Primefaces

У меня есть форма с некоторыми критериями ввода и кнопкой отправки. При нажатии кнопки «Отправить», подпрограмма «fontfaces» заполняется ниже формы с некоторыми результатами. Мне нужно показать разные таблицы в зависимости от введенных данных, не обновляя всю страницу. Например. если пользователь вводит Личность в качестве значения в форме, отображаются результаты для таблицы Person. Однако, если пользователь выбирает компанию, результаты для Компании отображаются с соответствующими столбцами.

+0

«без обновления всей страницы», а затем использовать обновление атрибутов primefaces на AJAX запросов на обновление только отдельные компоненты, а не весь сайт – djmj

ответ

2

Просто используйте атрибут update, чтобы обновить данные. Далее вы можете использовать <p:columns> для генерации столбцов динамически.

<p:inputText value="#{bean.input}" /> 
<p:commandButton value="submit" action="#{bean.submit}" update="table" /> 

<p:dataTable id="table" value="#{bean.model}" var="item"> 
    <p:columns value="#{bean.columns}" var="column"> 
     <h:outputText value="#{item[column]}" /> 
    </p:columns> 
</p:dataTable> 

что-то вроде:

public void submit() { 
    model = populateModelBasedOn(input); 
    columns = populateColumnsBasedOn(input); 
} 
+0

Спасибо за ответ. Исправьте меня, если я ошибаюсь, но модель представляет собой список с одним HashMap, который содержит пары ключ/значение для таблицы. Затем обозначение скобки используется для доступа к каждому значению хэш-карты по имени столбца (item [column])? Здесь совершенно новый jsf, как вы можете видеть :) –

+0

Он также может быть просто javabean. Обозначение скобок позволяет использовать динамические имена свойств. '# {Bean.columns}' просто содержит имена свойств. – BalusC