【发布时间】:2022-03-04 23:18:41
【问题描述】:
这是我所拥有的表格的视觉效果:
+---------+------------+------------------+ |页眉1 |页眉2 |页眉3 | +---------+------------+------------------+ | A 行 |输入 A |计算输出 A | | B 行 |输入 B |计算输出 B | |等等。 |等等。 |等等。 | +---------+------------+------------------+ |总计:总计算输出 | +--------------------------------------------+以及精简后的代码:
<p:dataTable id="myTable" value="#{myBean.someList}"
var="currentItem">
<p:column headerText="Header1">
<h:outputText value="#{currentItem.name}" />
</p:column>
<p:column headerText="Header2">
<pe:inputNumber value="#{currentItem.inputVal}">
<p:ajax event="change" listener="#{myBean.changeListener}"
update="outputVal outputTotal" />
</pe:inputNumber>
</p:column>
<p:column headerText="Header3">
<h:outputText id="outputVal" value="#{currentItem.outputVal}" />
</p:column>
<f:facet name="footer">
Total:
<h:outputText id="outputTotal" value="#{myBean.total}" />
</f:facet>
</p:dataTable>
myBean.someList 是一个 ArrayList<SomeOtherBean>,有一个 String 和两个 Integer,只有 getter 和 setter。 myBean.changeListener 计算给定行的第一个整数的第二个整数,以及所有行的总数。
因此,当我输入其中一个输入然后聚焦时,将调用侦听器并完成计算,但在屏幕上,第三列中的值发生了变化,但总和顽固地保持为零。我相当确定这与 PrimeFaces 将行索引附加到每个输入和输出的生成 id 有关,但我不知道如何到达页脚中的输出(其生成的 id 是mainForm:myTable:0:outputTotal )。
现在,我可以更新父表了。但是,只要接收焦点的输入是更新目标的一部分,焦点就会丢失,并且我处于极其严格的可访问性规则下,该表必须是键盘友好的(输入数字、制表符、输入数字、制表符等...)
我试过了:
- update=":outputTotal"(给出异常找不到具有标识符的组件...)
- update="myTable:0:outputTota(同样的例外)
- update="myTable:outputTotal"(无更新,总数为零)
- 将文本包装在 panelGroup 中并更新(不更新)
(PrimeFaces 3.5.0 和 MyFaces 未知版本)
【问题讨论】:
标签: ajax jsf primefaces accessibility