【问题标题】:SelectOneRadio set time on selectionSelectOneRadio 设置选择时间
【发布时间】: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 也与实际组件ID timeFirstLeft 不同。
  • 再次感谢,做出了改变。我试图让这些名字更有意义,但结果适得其反……
  • 所以你没有相同ID的重复元素?抱歉,只要您不出示 SSCCE,这个问题就很难回答。我所能做的就是建议您仔细阅读我对这个类似问题的回答:stackoverflow.com/questions/9466977/…

标签: ajax jsf-2 radiobuttonlist


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多