В дополнение к решениям, приведенным выше, у меня была проблема, заключающаяся в том, что мне пришлось динамически генерировать обновляемые компоненты (многие) на основе логики на стороне сервера (возможно, сложнее найти вложенность) .
Таким образом, решение на стороне сервера представляет собой эквивалент update=":#{p:component('table2')}"
1 , который использует org.primefaces.util.ComponentUtils.findComponentClientId( String designId )
:
// UiPnlSubId is an enum containing all the ids used within the webapp xhtml.
// It could easily be substituted by a string list or similar.
public static String getCompListSpaced( List< UiPnlSubId > compIds ) {
if ( compIds == null || compIds.isEmpty() )
return "" ;
StringBuffer sb = new StringBuffer( ":" ) ;
for ( UiPnlSubId cid : compIds )
sb.append( ComponentUtils.findComponentClientId( cid.name() ) ).append( " " ) ;
return sb.deleteCharAt( sb.length() - 1 ).toString() ; // delete suffixed space
}
вызывается с помощью другого метода, например, как ... update="#{foo.getCompListComputed( 'triggeringCompId' )}"
.
1 : сначала я попытался, не слишком задумываясь, вернуть public static String getCompListSpaced0() { return ":#{p:component('table2')}" ; }
в выражении ... update="#{foo.getCompListSpaced0()}
, что, конечно, (после размышлений о том, как работает фреймворк :)) не разрешается (возвращается как есть) и может вызвать проблемы с ним у некоторых пользователей. Также моя среда Eclipse / JBoss Tools предложила написать :#{p.component('table2')}
("." Вместо ":"), что не помогло - конечно.