我需要根据输入字段中的值更新选择列表。由于更新延迟,我不想更新选择列表,如果它已经有正确的选项。我不应该太困难并且尝试过这个:
<p:inputText value="#{bean.inputValue}">
<p:ajax update="#{bean.updateElement}">
</p:inputText> /
<h:selectOneMenu id="so" value="#{bean.soValue}">
<f:selectItem />
<f:selectItems value="#{bean.options}" var="option" itemLabel="#{option}"/>
</h:selectOneMenu>
但它不起作用,因为当输入字段中的值发生更改时,bean.updateElement
不会被调用。
好的,我需要使用p:remoteCommand
。我确信这可以解决这个问题:
<p:ajax oncomplete="updateSelect()"/>
...
<p:remoteCommand name="updateSelect" update="dt:so" oncomplete="alert('done')" />
字段位于p:dataTable id="dt"
行。我收到警报,但仍未调用bean.options
。如果我将其更改为update="dt"
它可以工作并且整个数据表已更新,但这不是我想要的。我还尝试使用so
form:dt:so
和:form:dt:so
。
然后我尝试了几个我能找到的选项:
RequestContext.getCurrentInstance().update("dt:so");
...
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("dt:so");
但没有任何反应。没有dt:
也试过。
修改
我更接近这一步:
<p:ajax update="@this #{bean.updateElement}"/>
现在每次更改输入字段值时都会调用bean.updateElement
但是选择组件在下次更改输入字段值之前不会更新。 bean.updateElement
返回“so”或“”,具体取决于输入字段值。
编辑2:
使用此选项可在输入字段被修改时保留所选选项:
<f:ajax execute="so" render="so" partialSubmit="true" />
我也试过<p:ajax process="so" update="so />
,但选项不再更新了。保持选择的选项是我的目标之一,所以这很好,但可能会更好。
我怎样才能让这件事非常简单?我的设置是:
答案 0 :(得分:0)
我不确定,您的方法updateElement
的作用是什么,但在
<p:ajax update="#{bean.updateElement}">
属性update
应包含要更新的组件的ID。
所以这可能适合你:
<p:ajax listener="#{bean.updateElement}" update="so">
答案 1 :(得分:0)
我正在使用这条ajax线:
<p:ajax partialSubmit="true" oncomplete="checkIt(#{iIndex})" />
这会调用我的JS函数将行索引传递给它。该函数将检查是否需要更新选择列表。如果是,那么我点击JavaScript中的这个按钮:
<p:commandButton id="btnUpdateList" update="so" partialSubmit="true" style="display:none"/>
这种方式可行,但列表更新有点慢,可能是因为它进入服务器两次。