В Python 2.7
Нарезка в Python
[a:b:c]
len = length of string, tuple or list
c -- default is +1. The sign of c indicates forward or backward, absolute value of c indicates steps. Default is forward with step size 1. Positive means forward, negative means backward.
a -- When c is positive or blank, default is 0. When c is negative, default is -1.
b -- When c is positive or blank, default is len. When c is negative, default is -(len+1).
Очень важно понимать назначение индекса.
In forward direction, starts at 0 and ends at len-1
In backward direction, starts at -1 and ends at -len
Когда вы говорите [a: b : c], вы говорите в зависимости от знака c (вперед или назад), начинайте с a и заканчивая на b (исключая элемент в bth-индексе). Используйте правило индексирования выше и помните, что вы найдете только элементы в этом диапазоне:
-len, -len+1, -len+2, ..., 0, 1, 2,3,4 , len -1
Но этот диапазон продолжается в обоих направлениях бесконечно:
...,-len -2 ,-len-1,-len, -len+1, -len+2, ..., 0, 1, 2,3,4 , len -1, len, len +1, len+2 , ....
Например:
0 1 2 3 4 5 6 7 8 9 10 11
a s t r i n g
-9 -8 -7 -6 -5 -4 -3 -2 -1
Если ваш выбор a, b и c позволяет перекрываться с вышеприведенным диапазоном при использовании правил для a, b, c выше, вы либо получите список с элементами (затронутыми во время обхода), либо вы получите пустой список.
Последнее: если a и b равны, то вы также получите пустой список:
>>> l1
[2, 3, 4]
>>> l1[:]
[2, 3, 4]
>>> l1[::-1] # a default is -1 , b default is -(len+1)
[4, 3, 2]
>>> l1[:-4:-1] # a default is -1
[4, 3, 2]
>>> l1[:-3:-1] # a default is -1
[4, 3]
>>> l1[::] # c default is +1, so a default is 0, b default is len
[2, 3, 4]
>>> l1[::-1] # c is -1 , so a default is -1 and b default is -(len+1)
[4, 3, 2]
>>> l1[-100:-200:-1] # Interesting
[]
>>> l1[-1:-200:-1] # Interesting
[4, 3, 2]
>>> l1[-1:-1:1]
[]
>>> l1[-1:5:1] # Interesting
[4]
>>> l1[1:-7:1]
[]
>>> l1[1:-7:-1] # Interesting
[3, 2]
>>> l1[:-2:-2] # a default is -1, stop(b) at -2 , step(c) by 2 in reverse direction
[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);