我一直在绞尽脑汁想弄清楚这一点。我有一个非常简单的要求,结果证明这是一个非常有趣的问题。
要求是在用户选择单选按钮列表中的选项时更新时间戳。
所以我有一个单选按钮列表:
...
<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>