В приведенных выше ответах не обсуждается назначение среза:
>>> r=[1,2,3,4]
>>> r[1:1]
[]
>>> r[1:1]=[9,8]
>>> r
[1, 9, 8, 2, 3, 4]
>>> r[1:1]=['blah']
>>> r
[1, 'blah', 9, 8, 2, 3, 4]
Это также может прояснить разницу между нарезкой и индексированием.
Используя стандартный API JSF, добавьте идентификатор клиента в PartialViewContext#getRenderIds()
.
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");
Используя API-интерфейс PrimeFaces, используйте RequestContext#update()
.
RequestContext.getCurrentInstance().update("foo:bar");
Если вы используете библиотеку служебных программ JSF OmniFaces , используйте Ajax#update()
.
Ajax.update("foo:bar");
Независимо от способа, обратите внимание, что эти идентификаторы клиентов должны представлять собой абсолютные идентификаторы клиентов, которые не с префиксом символа разделителя NamingContainer
, как это было бы со стороны просмотра.
Я также попытался обновить компонент из bean bean / class jsf bean / class
. После манипулирования компонентом пользовательского интерфейса вам необходимо выполнить следующее:
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())
Важно, чтобы используйте clientId вместо (server-side) componentId !!
Функция RequestContext
устарела из прайс-листов 6.2. Из этой версии используйте следующее:
if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
PrimeFaces.current().ajax().update(componentID);
}
И для выполнения javascript из backbean используйте этот способ:
PrimeFaces.current().executeScript(jsCommand);