Как я могу обновить , когда я нажимаю в другом ?

#jsf #primefaces

#jsf #первичные

Вопрос:

Например, я пытаюсь обновить общую цену в panel&rid , как только я нажимаю на другую panel&rid.

 <c:forEach items="#{coinsBean.selectedCountryVo.selectedGameVo.operatorGamePacka&eVos}" var="operatorGamePacka&eVo" &&t;

    <h:panelGrid id="pack_#{operatorGamePacka&eVo.id}"
                 styleClass="bord" 
                 style="border:solid #cbcbcb; mar&in: 4vmin;   min-width: -webkit-fill-available;text-ali&n: center;border-radius: 2vmin;" 
                 onclick="selectUcs(this.id);"
                                 &&t;                                       
        <p:commandLink  style="border-radius: 2vmin; paddin&: 2vw;back&round-size: 4vmin;text-ali&n: center;font-family: 'Cairo', sans-serif "  
                        update="totalSelected"   action="#{coinsBean.selectOperatorGamePacka&eVo(operatorGamePacka&eVo)}"
                        value="#{operatorGamePacka&eVo.packa&eName}"
                                       /&&t;

    </h:panelGrid&&t;
</c:forEach&&t; 

<h:panelGrid columns="1" id="totalSelected" style="back&round-color: white;                             
             paddin&-left: 5vh;border-radius: 0  0 1vh 1vh;mar&in-bottom: 2vh;width:95%;mar&in:auto;text-ali&n: left ;"&&t;
    <h:panelGrid&&t;
        <p id="total" style="color: #FE6D2C;font-size: 3.5vmin;font-family:  'Cairo', sans-serif;text-ali&n: center;font-wei&ht: bold;mar&in: auto;" dir="rtl"&&t;
            price
        </p&&t;

        <p id="total1" style="color: black;font-size: 3vw;font-family:  'Cairo', sans-serif;text-ali&n: center;font-wei&ht: bold;mar&in: auto" dir="rtl"&&t;
                        #{coinsBean.selectedCountryVo.selectedGameVo.selectedOperatorGamePacka&eVo.price}

        </p&&t;
    </h:panelGrid&&t;
</h:panelGrid&&t;
  

как только я нажимаю на вышеупомянутую!

Ответ №1:

Решение

Невозможно добавить ajax в h:panelGrid (см. Объяснение, чтобы понять, почему).

Вероятно, лучшим способом для этого было бы использование h:commandScript (начиная с JSF 2.3).

Просто добавьте это куда-нибудь на свою страницу:

 <h:form&&t;
    <h:commandScript name="someFunction" render="totalSelected" /&&t;
</h:form&&t;
  

Теперь, когда вы хотите обновить panelGrid, просто выполните someFunction() .

В вашем случае добавьте это в свою panelGrid, которая должна обновить другую:

 <h:panelGrid ... onclick="someFunction();"&&t;
    ...
</h:panelGrid&&t;
  

Можно также использовать css (плохой взлом), чтобы растянуть h:commandLink , чтобы вместить всю panelGrid (я могу добавить это по запросу).


Объяснение

По сути, каждый компонент ( h:panelGrid , h:commandLink и т.д.), Который вы можете использовать, является классом java. Но не каждый может / должен делать то же самое. Если вы хотите использовать поведение ajax с компонентом, этот конкретный компонент должен реализовывать ClientBehaviourHolder интерфейс. Это зарезервировано для компонентов действия, таких как h:commandButton , h:inputText , h:commandScript и т.д. . h:panelGrid Этот интерфейс не реализован.