Насколько я знаю, @ this обозначает текущий компонент, инициирующий событие, например:
<p:commandButton process="@this" ... />
А в JSF 2 Ajax @ this также может означать инкапсулирующий компонент, например:
<h:inputText ...>
<f:ajax execute="@this" ... />
</h:inputText>
И у меня есть один случай, когда использование p: datatable , включая или исключая @ this , может по-разному влиять на частичную передачу Ajax
Вот пример, в данном случае процесс использует @ this , и это работает, как и ожидалось, когда сначала происходит процесс, а затем следует setPropertyActionListener и последний, действие выполнено:
<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 имеет другое значение, отличное от текущего компонента, возможно, текущая запись в этом примере?
Я использую 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>