0

我一直在绞尽脑汁想弄清楚这一点。我有一个非常简单的要求,结果证明这是一个非常有趣的问题。

要求是在用户选择单选按钮列表中的选项时更新时间戳。

所以我有一个单选按钮列表:

...
<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>
4

1 回答 1

0

给定的构造表明您复制了具有相同 ID 的组件。确保您实际上没有具有相同 ID 的重复组件。

于 2012-05-29T22:56:48.893 回答