2013-12-09 1 views
0

У меня есть составной компонент JSF, который передает только некоторые части, основанные на атрибуте cc.attrs.list, переданном ему. В одном из компонентов я хочу обновить набор других компонентов на основе атрибута. Так что-то вроде этого:Как сделать условное обновление для компонента

<p:ajax event="dialogReturn" listener="#{cc.listener}" 
update="#{cc.attrs.id2}_input #{cc.attrs.id2}_resultTable"/> 

Проблема заключается в том, что resultTable не визуализируется все время, и когда resultTable нет, я получаю исключение Cannot find component with expression "id_resultTable", что не удивительно. Так что моя идея состояла в том, чтобы создать переменную, которая будет содержать идентификатор атрибута или пустая строка, как это:

<c:if test="#{cc.attrs.list}"> 
    <ui:param name="updateTable" value="#{cc.attrs.id2}_resultTable"/> 
</c:if> 
<c:otherwise> 
    <ui:param name="updateTable" value=""/> 
</c:otherwise> 

, а затем сделать обновление АЯКС так:

<p:ajax event="dialogReturn" listener="#{cc.listener}" 
update="#{cc.attrs.id2}_input #{updateTable}"/> 

Проблема заключается в том, что #{updateTable} переменная всегда является пустой строкой (я пытался представить ее как содержимое outputText), и я понятия не имею, почему.

+0

Спасибо, но состояние в порядке. Параметр '' 'list''' определяется следующим образом:' '' '' ', а в других случаях это работает (я использую его для рендеринга/не визуализации компонентов) – NeplatnyUdaj

ответ

1

Вы можете просто опустить ui:param и сделать проверку непосредственно в p:ajax:

<p:ajax event="dialogReturn" listener="#{cc.listener}" 
update="#{cc.attrs.id2}_input #{cc.attrs.list ? cc.attrs.id2.concat('_resultTable') : ''}"/> 

Проблема с c:if -подходом может быть, что при обновлении этого раздела с помощью AJAX условие не повторно проверяется как JSTL-теги оцениваются при времени сборки. Посмотрите на JSTL in JSF2 Facelets... makes sense? для получения дополнительной информации.

+0

Это работает! Благодарю. – NeplatnyUdaj

0

На самом деле это не решение, но я сделал обходной путь для проблемы, которая работает. Я добавил h:panelGroup с id вокруг таблицы, и я обновляю это вместо таблицы.