我一直在试图想出这个问题。我有一个非常简单的要求,结果是一个非常有趣的问题。
要求是在用户选择单选按钮列表中时更新时间戳。
所以我有一个单选按钮列表:
...
<h:selectOneRadio value="#{mybean.myvalue}" >
<f:selectItem itemLabel="A" itemValue="A"/>
<f:selectItem itemLabel="B" itemValue="B"/>
<f:selectItem itemLabel="C" itemValue="C"/>
<f:selectItem itemLabel="D" itemValue="D"/>
<f:ajax render="timeBox" listener="#{measurements.captureTime('timeBox')}"/>
</h:selectOneRadio>
...
页面下方还有一个文本框:
...
<h:outputText id="timeBox" value='#{measurements.timeBox}'>
<f:convertDateTime pattern="HH:mm:ss"/>
</h:outputText>
...
然后在支持bean中我定义了监听器:
...
public void captureTime(String id){
if(id.equals("timeBox"){
timeBox = new Date(System.currentTimeMillis());
}
}
...
但是当我更改单选按钮时,该值不会更新。我很确定这与JSF的各个阶段有关(即由于这篇文章中的问题而没有更新它:http://balusc.blogspot.ca/2012/03/reset-non-processed-input-components-on.html)但我不完全确定如何解决它...我如果可能的话,我真的想避免包括另一个图书馆。
如果您需要更多信息,请随时告诉我,我很乐意帮忙。
谢谢!
修改 这些组件的结构是:
<h:form>
<table>
<tr>
<td>
<h:select.../>
</td>
</tr>
<tr>
<td>
<h:output.../>
</td>
</tr>
</table>
</h:form>
答案 0 :(得分:0)
给定的构造建议您复制具有相同ID的组件。确保您实际上没有具有相同ID的重复组件。