给出以下代码:
<p:column headerText="#{text.article}">
<h:panelGroup>
<p:autoComplete id="relationArticle"
value="#{relation.article}"
completeMethod="#{articleRelationsModel.findArticles}"
queryDelay="#{text.query_delay}"
minQueryLength="#{text.artikkel_min_query_length}"
var="article"
itemLabel="#{article.articleNo} #{article.text1}"
itemValue="#{article}"
converter="#{articleConverter}"
scrollHeight="150"
forceSelection="true"
styleClass="ui-autocomplete-big">
<p:ajax event="itemSelect" update="relationUnit" process="@this"/>
</p:autoComplete>
<p:message for="relationArticle"/>
</h:panelGroup>
</p:column>
<p:column headerText="#{text.unit}" style="width: 80px;">
<h:selectOneMenu id="relationUnit" value="#{relation.unit}" converter="#{articleUnitConverter}">
<f:selectItem itemLabel="<< #{text.search}" noSelectionOption="true" itemDisabled="#{relation.article != null}"/>
<f:selectItems value="#{articleRelationsModel.getUnits(relation)}" var="unit" itemLabel="#{unit.code}" itemValue="#{unit}"/>
<p:ajax event="change" process="@this" update="@this"/>
</h:selectOneMenu>
<p:message for="relationUnit"/>
</p:column>
如何在用户选择“relationArticle”组件中的值后刷新“relationUnit”组件?
现在发生的事情是,在autcompete itemSelect事件触发后,“relationUnit”组件使用#{articleRelationsModel.getUnits(relation)}使用新内容进行更新。在此更新期间,将使用结果列表中的一个选项更新关系对象。但是,这不会在更新后的“relationUnit”组件中反映出来。但如果我在此之后手动执行另一次更新,则会被选中。
如何在这里实现想要的结果?
答案 0 :(得分:0)
您可以使用p:remoteCommand
,它通常用于从Javascript调用ManagedBean方法
虽然它可以满足上述目的,但您也可以使用它来更新其他组件。
您可以从p:remoteCommand
的{{1}}属性中调用p:ajax
。
oncomplete
现在<p:autoComplete id="relationArticle" ...>
<p:ajax event="itemSelect" update="relationUnit" onComplete="updateRelationUnit()" process="@this"/>
</p:autoComplete>
<p:remoteCommand name="updateRelationUnit" update="relationUnit" process="@this" />
会更新p:ajax
一次,然后再次拨打relationUnit
,然后再转发p:remoteCommand
。
我不知道你为什么要这种奇怪的行为,但上面的策略和代码服务器你的目的就好了。