Какова функция @именно этого?
Насколько я знаю, @this обозначает текущий компонент, запускающий событие, например:
<p:commandButton process="@this" ... />
И в JSF 2 Ajax @this также может означать инкапсулирующий компонент, например:
<h:inputText ...>
<f:ajax execute="@this" ... />
</h:inputText>
И у меня есть один случай, когда использование p: datatable, включая или исключая @this, может иметь иное влияние на частичный submit Ajax
В этом примере в этом процессе процесс использует @this, и это работает так, как ожидалось, когда сначала происходит процесс, а затем setPropertyActionListener и last, выполняется действие:
<p:column>
<p:commandLink
value="#{anggaranDetail.map['code']}"
process="@this infoAnggaranForm:Anggaran"
update="detailDialogForm:Anggaran detailDialogForm:SubAnggaran"
oncomplete="infoAnggaranDialog.hide()"
image="ui-icon ui-icon-search"
action="#{tInputBean.updateAnggaranSubAnggaran}">
<f:setPropertyActionListener value="#{anggaranDetail}"
target="#{infoAnggaranBean.selectedAnggaranDetail}" />
</p:commandLink>
</p:column>
Но когда я опускаю @this из этого примера, setPropertyActionListener и действие никогда не выполняются, как если бы они не были есть.
Интересно, почему? Возможно, @this имеет другое значение, отличное от текущего компонента, возможно, текущую запись в этом примере?
Im, использующий tomcat 7, и это мои зависимости:
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.4-b09</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.4-b09</version>
<scope>compile</scope>
</dependency>
Ответы
Ответ 1
Атрибуты PrimeFaces process
и стандартные JSF execute
должны указывать на идентификаторы компонентов, которые JSF должен обрабатывать в течение всего жизненного цикла JSF по запросу ajax (получить параметры запроса, проверить их, модель обновления, выполнить действие), Значение process
по умолчанию: @form
, текущая форма и execute
по умолчанию - @this
, текущий компонент. В командных ссылках/кнопках это необходимо для выполнения действий, связанных с самой ссылкой/кнопкой.
Однако в вашем datatable у вас есть process="@this infoAnggaranForm:Anggaran"
, таким образом, два компонента для обработки. Если вы опустите @this
, но сохраните другой компонент, тогда он будет обрабатывать/выполнять другой компонент, а не компонент link/button. Если вы опустите атрибут process
, по умолчанию будет @form
. Если у вас больше других компонентов ввода в одной и той же форме, они также будут обработаны.
В зависимости от конкретного функционального требования вы можете просто сохранить его process="@this infoAnggaranForm:Anggaran"
или опустить. Затем JSF обрабатывает/выполняет как минимум как кнопку, так и другой компонент точно так, как вы хотите.
См. также: