p:commandButton in accordionPanel-tab 不更新数据表
p:commandButton in accordionPanel-tab does not update datatable
我的问题如下:我有一个带有不同选项卡的 accordionPanel。在一个选项卡中有一个下拉菜单、一个输入和一个命令按钮。当用户通过单击按钮添加内容时,一个项目将添加到一个列表中,该列表应显示在上面的数据表中。上面应该呈现另一个 Inputfield 和另一个按钮。
使用 JSF 它工作正常,但 <h:commandButton/>
更新整个手风琴面板,关闭当前并打开第一个。 <p:commandButton/>
首先是 "ok",但它没有更新任何东西,或者找不到标识符。
现在我什至得到一个 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>
首先,你应该写一个Minimal, Complete and Verifiafle example并删除所有不相关的代码。 Stack Overflow 不是一个旨在编写您的代码而是帮助您纠正错误的社区。
一旦说过,请记住向应该更新数据表的 <p:commandButton/>
添加一个 update
属性(我看到您的某些按钮没有此属性)。
此外,如果要更新的组件是另一种形式,您应该使用对它的绝对引用。例如:
<h:form id="firstForm">
<p:dataTable id="table" .........
</p:dataTable>
</h:form>
<h:form id="secondForm">
<p:commandButton update=":firstForm:table" ....
</h:form>
另见
- How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"
我的问题如下:我有一个带有不同选项卡的 accordionPanel。在一个选项卡中有一个下拉菜单、一个输入和一个命令按钮。当用户通过单击按钮添加内容时,一个项目将添加到一个列表中,该列表应显示在上面的数据表中。上面应该呈现另一个 Inputfield 和另一个按钮。
使用 JSF 它工作正常,但 <h:commandButton/>
更新整个手风琴面板,关闭当前并打开第一个。 <p:commandButton/>
首先是 "ok",但它没有更新任何东西,或者找不到标识符。
现在我什至得到一个 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>
首先,你应该写一个Minimal, Complete and Verifiafle example并删除所有不相关的代码。 Stack Overflow 不是一个旨在编写您的代码而是帮助您纠正错误的社区。
一旦说过,请记住向应该更新数据表的 <p:commandButton/>
添加一个 update
属性(我看到您的某些按钮没有此属性)。
此外,如果要更新的组件是另一种形式,您应该使用对它的绝对引用。例如:
<h:form id="firstForm">
<p:dataTable id="table" .........
</p:dataTable>
</h:form>
<h:form id="secondForm">
<p:commandButton update=":firstForm:table" ....
</h:form>
另见
- How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"