我的问题如下:我有一个带有不同选项卡的手风琴面板。在一个选项卡中,有一个下拉菜单,一个输入和一个命令按钮。当用户通过单击按钮添加某些内容时,一个项目将添加到一个列表中,该列表应显示在上面的数据表中。在上方应呈现另一个Inputfield和另一个按钮。
使用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>
答案 0 :(得分:0)
首先,您应该编写一个Minimal, Complete and Verifiafle example并删除所有不相关的代码。堆栈溢出并不是旨在编写代码的社区,而是旨在帮助您纠正错误的社区。 p>
曾经说过,记得在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>
另请参见