p: remoteCommand не вызывает объявленный метод действия - PullRequest
0 голосов
/ 08 ноября 2019

Веб-страница:

<html xmlns="http://www.w3.org/1999/xhtml"   
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui">

<h:body>

    <ui:composition template="../../Template/template.xhtml">

        <ui:define name="content">

            <h:form>

                <h:outputText id="montest" value="#{ProviderLogin.i}"/>

                <button class="ZWButtonActionIntervention pfButtonWhite" type="button" onclick="testpageRC()"/>
                    <span>TESTING</span>
                </button>

                <p:remoteCommand name="testpageRC" process="@this" update="montest" action="#{ProviderLogin.TESTING()}"/>

                <p:commandButton styleClass="ZWButtonActionIntervention pfButtonOrange" value="#{GestionIntervention.m_typeNonTraitee}" action="#{ProviderLogin.TESTING()}"/>

            </h:form>

        </ui:define>    
    </ui:composition>

</h:body>

Мой класс Java (Bean)

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

@SessionScoped
@ManagedBean(name="ProviderLogin")
public class ProviderLogin implements Serializable
{ 
    private int i;

    public int getI(){return i;}

    public void TESTING(){i++;}
}

У меня есть точка останова в функции 'TESTING ()'

Когда я нажимаю 'p: commandButton', достигается точка останова

Когда я нажимаю 'кнопку' (вызывается p:remoteCommand), точка останова НЕ достигается

Что действительно странно, так это то, что p: remoteCommand работает для этого: update="montest" Но метод в компоненте не запускается.

Кстати, когда я начинаю писать #{... Iиметь доступ к моему бину (переменная и методы)

Я использую Primefaces 6.2

1 Ответ

0 голосов
/ 12 ноября 2019

Обнаружена проблема.

Каждая веб-страница определяет содержимое шаблона. В этом шаблоне есть раздел «Контент», который содержит 2 <h:form>. Один рендерер, когда пользователь не вошел в систему. Другая отображается при правильном входе пользователя в систему.

На каждой странице, которая переопределяет содержимое (когда пользователь входит в систему), у меня был второй раздел <h:form>. Кажется, что action из <p:remoteCommand> не справляется так хорошо, в то время как <p:button>. Я просто удалил эту форму на каждой странице, и моя проблема была решена.

Мой шаблон (часть контента)

<div id="content" style="padding: 10px">
    <h:form rendered="#{!ProviderLogin.m_User.m_bLogged}">
        <h:button value="Connexion" outcome="/Gestion/Connexion.xhtml"/>
    </h:form>
    <h:form id="formContent" rendered="#{ProviderLogin.m_User.m_bLogged}">
        <ui:insert name="content" >
            <ui:include src="content.xhtml" />
        </ui:insert>
    </h:form>
</div>

Одна страница, которая переопределяет часть контента (со второй формой, которая далая ошибаюсь)

<h:body>
    <ui:composition template="../Template/template.xhtml">
        <ui:define name="content">
            <h:form id="formInterventions">
                PAGE CONTENT
            </h:form>
        </ui:define>    
    </ui:composition>
</h:body>

На той же странице, которая переопределяет часть содержимого (без 2-й формы), тогда мой action из <p:remoteCommand> работает!

 <h:body>
     <ui:composition template="../Template/template.xhtml">
         <ui:define name="content">
             PAGE CONTENT
         </ui:define>   
     </ui:composition>
 </h:body>

Iтакже предоставьте вам эту информацию:

я использую update некоторых элементов управления, таких как эта витрина:

https://www.primefaces.org/showcase/ui/ajax/poll.xhtml

Вам необходимо указать id элемента управленияВы хотите update

Когда вы используете <h:form>, иногда вам также необходимо указать id из form следующим образом:

update="formID:controlID"

Из-за этого<h:form> определенный в моем шаблоне (который я забыл), он не работал, потому что я совсем не ожидал этого и не дал этой форме идентификатор, поэтому в основном был задан идентификатор по умолчанию (j_idt27).

Это означает, что моя update функция не смогла найти указанный контрольный идентификатор

...