PrimeFaces 对话框不使用我在视图中提供的信息

PrimeFaces dialog doesn't use the information I provide in the view

我有一个包含以下字段的视图:

<p:selectOneMenu style="width:40px" value="#{capacityFamilyBean.capacityFamily.bottleneck}">
    <f:selectItems value="#{capacityFamilyBean.availableCapFamilyBottlenecks()}"/>
</p:selectOneMenu>

<p:inputText id="capacityFamilyName" binding="#{capacityFamilyName}" style="margin-left:20px" value="#{capacityFamilyBean.capacityFamily.name}">
    <p:ajax event="change" update="newBundleButton"/>
</p:inputText>

<p:commandButton id="newBundleButton" icon="ui-icon-plus" disabled="#{empty capacityFamilyName.value}" value="${msgs.New}" oncomplete="PF('capacityFamilyDialog').show();"/>

你可以看到值属性是{capacityFamilyBean.capacityFamily.prprty}

capacityFamilyDialog 使用相同的属性,但未预先填充

<p:selectOneMenu value="#{capacityFamilyBean.capacityFamily.bottleneck}">
    <f:selectItems value="#{capacityFamilyBean.availableCapFamilyBottlenecks()}" />
</p:selectOneMenu>

<p:inputText id="capacityFamilyName" style="margin-left:20px" value="#{capacityFamilyBean.capacityFamily.name}"/>

我假设它们指的是不同的 capacityFamily 对象,但我该如何反驳呢?

对话框随页面一起提供。所以它完全是空的。

oncomplete="PF('capacityFamilyDialog').show();"

是纯粹的 javascript,只显示这个空的弹出窗口。如果您想使用实际值进行对话,则必须在 ajax 调用中 update 它,就像您的 commandButton.

<p:commandButton value="${msgs.New}" update="capacityFamilyDialog_ID" oncomplete="PF('capacityFamilyDialog').show();"/>

当您单击按钮时,对话会起作用。我认为您应该更新对话框的 ID。

JSF 代码

 <p:commandButton id="impBtb"
     process="@this" icon="ui-icon-plus" disabled="#{empty capacityFamilyName.value}" 
      value="${msgs.New}" oncomplete="PF('capacityFamilyDialog').show();" update="@form:capacityFamilyDialog">
</p:commandButton>

因此,您可能需要从命令按钮执行 ajax 调用以更新对话框。

希望对您有所帮助!!