Primefaces ajax 在对话框的另一个组件中更新组件
Primefaces ajax update component in another component on dialog
当在 selectOneMenu 中使用 ajax 更新另一个 selectOneMenu 时,ajax 功能不起作用。代码有什么问题?
此代码有效,但我不想更新所有表单。
<p:dialog header="Create New Campaign" height="auto" appendTo="@(body)" modal="true" widgetVar="createCampaign" resizable="false">
<h:form id="createCampaign">
<h:panelGrid columns="2" cellpadding="3" cellspacing="3" style="width: 400px; max-height: 500px;" >
<h:outputLabel value="Name:" for="Name" />
<p:inputText style="width:90%" id="Name" value="#{testBean.name}" title=" Name" required="true">
</p:inputText>
<h:outputLabel value="Assign to:" for="assignTo" />
<p:selectOneMenu style="width:90%" id="assignTo" value="#{testBean.city}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testStaticSelectBean.cities}" />
<p:ajax event="change" listener="#{testBean.control}" update="createCampaign"/>
</p:selectOneMenu>
<h:outputLabel value="Entities:" rendered="#{testBean.entityControl}" id="entitiesLabel"/>
<p:selectOneMenu style="width:90%" id="entities" value="#{testBean.entity}" rendered="#{testBean.entityControl}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testSubSelectBean.entities}" />
</p:selectOneMenu>
</h:panelGrid>
<br />
<p:commandButton update="create" value="Save" icon="ui-icon-check" actionListener="#{testBean.Test}" oncomplete="window.location.reload();"/>
</h:form>
</p:dialog>
当城市选择仅更新其实体时,显示实体和实体标签。我这样试过,但没有用。
<p:dialog header="Create New Campaign" height="auto" appendTo="@(body)" modal="true" widgetVar="createCampaign" resizable="false">
<h:form id="createCampaign">
<h:panelGrid columns="2" cellpadding="3" cellspacing="3" style="width: 400px; max-height: 500px;" >
<h:outputLabel value="Name:" for="Name" />
<p:inputText style="width:90%" id="Name" value="#{testBean.name}" title=" Name" required="true">
</p:inputText>
<h:outputLabel value="Assign to:" for="assignTo" />
<p:selectOneMenu style="width:90%" id="assignTo" value="#{testBean.city}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testStaticSelectBean.cities}" />
<p:ajax event="change" listener="#{testBean.control}" update=":createCampaign:entities :createCampaign:entities"/>
</p:selectOneMenu>
<h:outputLabel value="Entities:" rendered="#{testBean.entityControl}" id="entitiesLabel"/>
<p:selectOneMenu style="width:90%" id="entities" value="#{testBean.entity}" rendered="#{testBean.entityControl}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testSubSelectBean.entities}" />
</p:selectOneMenu>
</h:panelGrid>
<br />
<p:commandButton update="create" value="Save" icon="ui-icon-check" actionListener="#{testBean.Test}" oncomplete="window.location.reload();"/>
</h:form>
</p:dialog>
我假设您已经检查过 testBean.control() 确实被解雇了。
由于您的 p:selectOneMenu with id="entities" 在构建 DOM 树时未呈现,因此 [= 的更新无法将其作为目标21=],只是因为它不存在。您需要用容器包围它,例如 p:outputPanel 并改为更新容器。
像这样:
<p:ajax event="change" listener="#{testBean.control}" update="createCampaign:panel1"/>
<p:outputPanel id ="panel1">
<h:outputLabel value="Entities:" rendered="#{testBean.entityControl}" id="entitiesLabel"/>
<p:selectOneMenu style="width:90%" id="entities" value="#{testBean.entity}" rendered="#{testBean.entityControl}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testSubSelectBean.entities}" />
</p:selectOneMenu>
</p:outputPanel>
当在 selectOneMenu 中使用 ajax 更新另一个 selectOneMenu 时,ajax 功能不起作用。代码有什么问题?
此代码有效,但我不想更新所有表单。
<p:dialog header="Create New Campaign" height="auto" appendTo="@(body)" modal="true" widgetVar="createCampaign" resizable="false">
<h:form id="createCampaign">
<h:panelGrid columns="2" cellpadding="3" cellspacing="3" style="width: 400px; max-height: 500px;" >
<h:outputLabel value="Name:" for="Name" />
<p:inputText style="width:90%" id="Name" value="#{testBean.name}" title=" Name" required="true">
</p:inputText>
<h:outputLabel value="Assign to:" for="assignTo" />
<p:selectOneMenu style="width:90%" id="assignTo" value="#{testBean.city}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testStaticSelectBean.cities}" />
<p:ajax event="change" listener="#{testBean.control}" update="createCampaign"/>
</p:selectOneMenu>
<h:outputLabel value="Entities:" rendered="#{testBean.entityControl}" id="entitiesLabel"/>
<p:selectOneMenu style="width:90%" id="entities" value="#{testBean.entity}" rendered="#{testBean.entityControl}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testSubSelectBean.entities}" />
</p:selectOneMenu>
</h:panelGrid>
<br />
<p:commandButton update="create" value="Save" icon="ui-icon-check" actionListener="#{testBean.Test}" oncomplete="window.location.reload();"/>
</h:form>
</p:dialog>
当城市选择仅更新其实体时,显示实体和实体标签。我这样试过,但没有用。
<p:dialog header="Create New Campaign" height="auto" appendTo="@(body)" modal="true" widgetVar="createCampaign" resizable="false">
<h:form id="createCampaign">
<h:panelGrid columns="2" cellpadding="3" cellspacing="3" style="width: 400px; max-height: 500px;" >
<h:outputLabel value="Name:" for="Name" />
<p:inputText style="width:90%" id="Name" value="#{testBean.name}" title=" Name" required="true">
</p:inputText>
<h:outputLabel value="Assign to:" for="assignTo" />
<p:selectOneMenu style="width:90%" id="assignTo" value="#{testBean.city}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testStaticSelectBean.cities}" />
<p:ajax event="change" listener="#{testBean.control}" update=":createCampaign:entities :createCampaign:entities"/>
</p:selectOneMenu>
<h:outputLabel value="Entities:" rendered="#{testBean.entityControl}" id="entitiesLabel"/>
<p:selectOneMenu style="width:90%" id="entities" value="#{testBean.entity}" rendered="#{testBean.entityControl}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testSubSelectBean.entities}" />
</p:selectOneMenu>
</h:panelGrid>
<br />
<p:commandButton update="create" value="Save" icon="ui-icon-check" actionListener="#{testBean.Test}" oncomplete="window.location.reload();"/>
</h:form>
</p:dialog>
我假设您已经检查过 testBean.control() 确实被解雇了。
由于您的 p:selectOneMenu with id="entities" 在构建 DOM 树时未呈现,因此 [= 的更新无法将其作为目标21=],只是因为它不存在。您需要用容器包围它,例如 p:outputPanel 并改为更新容器。
像这样:
<p:ajax event="change" listener="#{testBean.control}" update="createCampaign:panel1"/>
<p:outputPanel id ="panel1">
<h:outputLabel value="Entities:" rendered="#{testBean.entityControl}" id="entitiesLabel"/>
<p:selectOneMenu style="width:90%" id="entities" value="#{testBean.entity}" rendered="#{testBean.entityControl}">
<f:selectItem itemLabel="Choose One" itemValue="" />
<f:selectItems value="#{testSubSelectBean.entities}" />
</p:selectOneMenu>
</p:outputPanel>