【发布时间】:2012-05-29 15:12:15
【问题描述】:
我一直在绞尽脑汁想弄清楚这一点。我有一个非常简单的需求,结果却是一个非常有趣的问题。
要求是当用户在单选按钮列表中选择一个选项时更新时间戳。
所以我有一个单选按钮列表:
...
<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>
【问题讨论】:
-
是的,我忘记换名字了,现在已经修好了。
-
好的,您使用的是 Mojarra 还是 MyFaces?如果我没记错的话,如果 ajax 侦听器方法采用与
AjaxBehaviorEvent不同的参数,MyFaces 不会吞下它。 -
顺便说一句,您的渲染ID
timeBox也与实际组件IDtimeFirstLeft不同。 -
再次感谢,做出了改变。我试图让这些名字更有意义,但结果适得其反……
-
所以你没有相同ID的重复元素?抱歉,只要您不出示 SSCCE,这个问题就很难回答。我所能做的就是建议您仔细阅读我对这个类似问题的回答:stackoverflow.com/questions/9466977/…
标签: ajax jsf-2 radiobuttonlist