Подтвердить что ты не робот

Какова функция @именно этого?

Насколько я знаю, @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>
4b9b3361

Ответ 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 обрабатывает/выполняет как минимум как кнопку, так и другой компонент точно так, как вы хотите.

См. также: