p: commandButton в accordionPanel-tab не обновляет данные - PullRequest
0 голосов
/ 20 декабря 2018

Моя проблема заключается в следующем: у меня есть гармошка с различными вкладками.И в одной вкладке есть выпадающий, вход и кнопка Command.А когда пользователь что-то добавляет, нажимая кнопку, в список добавляется элемент, который должен отображаться в приведенной выше таблице данных.И выше должно быть отображено еще одно поле ввода и другая кнопка.

С JSF все работало нормально, но <h:commandButton/> обновляет всю аккордеонную панель, закрывает текущую и открывает первую.<p:commandButton/> сначала был «в порядке», но ничего не обновил, или идентификатор не был найден.

Теперь я даже получаю исключение NullPointerException, поскольку кнопка запускается автоматически при загрузке страницы.Я не знаю ошибку.Я пробовал несколько вещей, но ничего не работает.Кто-нибудь может помочь?

<p:accordionPanel id="tabPanel" header="Lebensmittel" multiple="true">
            <p:tab title="Neue Mahlzeit erstellen">
                <h:form>
                        <h:outputText value="Neue Mahlzeit erstellen: "/>
                        <br/>
                        <p:selectOneMenu value="#{kcalModel.grocPrototype}">
                            <f:converter binding="#{kcalModel.grocProtoConverter}"/>
                            <f:selectItem itemLabel="Bitte auswählen.." itemValue="" />
                            <f:selectItems value="#{kcalModel.grocPrototypes}" var="groc" itemValue="#{groc.name}"
                                           itemLabel="#{groc.name}"/>
                        </p:selectOneMenu>
                        <!--<h:inputText value="#{kcalModel.amount}"/> Gramm-->
                        <p:inputNumber value="#{kcalModel.amount}" size="5"/> Gramm

                        <p:commandButton value="+ zu neuer Mahlzeit hinzufügen" process="@form" update="form:meal" action="#{kcalModel.addGroceryToMeal()}"/>
                </h:form>

                <h:form id="meal">
                    <p:fragment>
                        <p:autoUpdate />
                        <h:dataTable id="grocs" value="#{kcalModel.meal.groceries}" var="groc">
                            <h:column>
                                <h:outputText value="#{groc.name}"/>
                            </h:column>
                            <h:column>
                                <h:outputText value="#{groc.volumeInGramm}"/>
                            </h:column>
                        </h:dataTable>

                        <h:inputText id="titel" value="#{kcalModel.meal.title}" pt:placeholder="Bezeichnung" required="true"
                                     requiredMessage="Bezeichnung fehlt." rendered="#{kcalModel.meal.groceries.size() > 0}">
                            <h:message for="titel" style="color:indianred"/>
                        </h:inputText>
                        <h:selectOneMenu value="#{kcalModel.meal.mealType}" rendered="#{kcalModel.meal.groceries.size() > 0}">
                            <f:selectItem itemLabel="Bitte auswählen.." itemValue="" />
                            <f:selectItems value="#{kcalModel.mealTypes}" var="type" itemValue="#{type}"
                                           itemLabel="#{type.toString()}"/>
                        </h:selectOneMenu>
                        <h:commandButton value="neue Mahlzeit erstellen" action="#{kcalModel.createMeal()}"
                                         rendered="#{kcalModel.meal.groceries.size() > 0}"/>
                    </p:fragment>

                </h:form>
            </p:tab>

            <p:tab title="Benutzerdefinierte Mahlzeiten" rendered="#{kcalModel.userDefinedMeals.size() > 0}">
                <h:form>
                    <p:selectOneMenu value="#{kcalModel.meal}" rendered="#{kcalModel.userDefinedMeals.size() > 0}">
                        <f:selectItems value="#{kcalModel.userDefinedMeals}" var="uMeal" itemValue="#{uMeal}" itemLabel="#{uMeal.title}"/>
                        <f:converter binding="#{kcalModel.mealConverter}"/>
                    </p:selectOneMenu>
                    <p:commandButton value="+ Mahlzeit hinzufügen" action="#{kcalModel.addMeal()}"
                                     rendered="#{kcalModel.userDefinedMeals.size() > 0}" update=":revenue, :kcals"/>
                </h:form>
            </p:tab>
        </p:accordionPanel>

1 Ответ

0 голосов
/ 21 декабря 2018

Прежде всего, вы должны написать Minimal, Complete и Verifiafle пример и удалить весь нерелевантный код.Stack Overflow - это не сообщество, предназначенное для написания вашего кода, а для того, чтобы помочь вам исправить ваши ошибки.

После этого не забудьте добавить атрибут update в <p:commandButton/>, который должен обновлять данные (я виделчто некоторые из ваших кнопок не имеют этого атрибута).

Кроме того, если компонент для обновления находится в другой форме, вы должны использовать абсолютную ссылку на него.Например:

<h:form id="firstForm">
  <p:dataTable id="table" .........
  </p:dataTable>
</h:form>
<h:form id="secondForm">
  <p:commandButton update=":firstForm:table" ....
</h:form>

См. Также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...