【发布时间】:2019-05-21 07:00:02
【问题描述】:
我的问题如下:我有一个带有不同标签的手风琴面板。在一个选项卡中有一个下拉菜单、一个输入和一个命令按钮。当用户通过单击按钮添加内容时,一个项目将添加到列表中,该列表应显示在上面的数据表中。上面应该呈现另一个 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>
【问题讨论】:
-
使用
ajax="false",p:commandButton将作为h:commandButton工作。使用p:commandButton,您需要更新表单的适当部分。添加表单 id 并将其包含在更新属性中。 -
我添加了一个 form-id 并做了这个:
但不起作用。错误:找不到组件 -
现在我有另一个疯狂的行为:现在这是我的按钮:
并且当我调用Page 时,我得到一个NullpointerException,因为它看起来好像按钮是由他自己触发的。有没有人也注意到这种行为?我的另一个按钮也有同样的问题。方法后面的括号对吗? -
解决了。评论的按钮被评估。所以删除它们,或者添加:
javax.faces.FACELETS_SKIP_COMMENTS true
标签: jsf primefaces