我正在尝试让 h:textInput 在更改时重新呈现,我已经使用 a4j:ajax 和 f:ajax 进行了尝试。
使用 a4j:ajax 时:
<h:panelGroup id="xyzPG">
<ui:repeat var="var" ... >
...
<h:inputText id="#{idController.getIdXYZ(var.id)}"
value="#{someModel.value}"
size="3"
styleClass="#{errorController.getErrorStateStyleId(idController.getIdXYZ())}">
<a4j:ajax event="change" render="xyzPG" listener="#{listener.doSomeStuff}" />
</h:inputText>
...
</ui:repeat>
</h:panelGroup>
这是第一次工作,在面板第一次更新后它停止更新模型并且监听器也没有被调用。然而,渲染被触发,导致旧值被显示。
现在,当我用 f:ajax 替换 a4j:ajax 时,我收到错误消息,即在 xyzInput 中找不到 id xyzPG。
<f:ajax event="change" render="@this" listener="#{listener.doSomeStuff}" />
当我尝试将重新渲染限制为 inputText 时,它总是会更新模型并调用侦听器,但是不会重新渲染 h:inputText。
我已经尝试在 inputText 周围放置另一个 panelGroup ,但这也不起作用。
我们不使用 h:dataTable 的原因是我们必须生成一个具有以下布局的表:
----------------------------
| dataSet1 | dataSet 2 |
----------------------------
| dataSet3 | dataSet 4 |
etc...
因此我们使用 ui:repeat 的 offset 和 step 属性。