在Web应用程序中,有一种表单供用户注册一些值,其中之一是prefixo。选择prefixo值时,将用Executivos值填充selectCheckboxMenu(ajax)。这可以正常工作,并且如果用户单击“保存”按钮,则可以正确地将其持久保存在数据库中。
<p:outputLabel value="#{adeBundle.CreateDemandasLabel_prefixo}" for="prefixo" />
<h:panelGroup>
<p:selectOneMenu id="prefixo" value="#{demandasController.selected.prefixo}" converter="prefixosConverter" filter="true" filterMatchMode="contains" required="true" requiredMessage="#{adeBundle.CreateDemandasRequiredMessage_prefixo}" >
<f:selectItem itemLabel="#{adeBundle.SelectOneMessage}" itemValue="#{null}" />
<f:selectItems value="#{prefixosController.items}"
var="prefixoItem"
itemValue="#{prefixoItem}"
itemLabel="#{prefixoItem.prefixo} - #{prefixoItem.nomePrefixo}"
/>
<p:ajax event="valueChange" update="uorPosCollection" listener="#{demandasController.changePrefixo}"/>
</p:selectOneMenu>
<p:tooltip for="prefixo" value="#{demandasController.getComponentMessages('prefixo', adeBundle.CreateDemandasHelpText_prefixo)}"/>
</h:panelGroup>
<p:outputLabel value="#{adeBundle.CreateDemandasLabel_uorPosCollection}" for="uorPosCollection" />
<p:selectCheckboxMenu id="uorPosCollection" value="#{demandasController.selected.uorPosCollection}" label="Executivo(s)" multiple="true"
converter="uorPosConverter" filter="true" filterMatchMode="contains" panelStyle="width:420px" dynamic="true" title="Selecione um ou mais..." >
<f:selectItems value="#{demandasController.availableExecutivos}"
var="uorPosCollectionItem"
itemValue="#{uorPosCollectionItem}"
itemLabel="#{uorPosCollectionItem.matricula} - #{uorPosCollectionItem.nome} (#{uorPosCollectionItem.prefixo.prefixo})"
>
<p:inputSwitch disabled="#{demandasController.selected.uorPosCollection.size()==0}" value="#{demandasController.valueOnExecutivo}" onLabel="Sim" offLabel="Não" showLabels="true" style="float: right"><p:ajax listener="#{demandasController.addEmailAdviseMessage}" update=":growl" /></p:inputSwitch>
<p:outputLabel value="Enviar e-Mail: " style="float: right; padding-top: 0.5em" />
</f:selectItems>
<p:tooltip for="uorPosCollection" value="#{demandasController.getComponentMessages('uorPosCollection', adeBundle.CreateDemandasHelpText_uorPosCollection)}"/>
</p:selectCheckboxMenu>
问题是:每当用户选择Prefixo时,inputSwitch就会被复制:
有谁知道为什么会这样,我该如何解决?
提前致谢。
最佳答案
您必须将<p:inputSwitch>
放在<f:selectItems>
之外。
然后放入<p:ajax>
以更新inputSwitch值。