无法在ICEfaces 1.8.2中实现重置按钮

时间:2011-03-07 21:42:05

标签: jsf icefaces

我有一个表单,其中包含从数据库填充的值。该表单由一些ice:inputText组件和partialSubmit =“true”组成,因此当这些字段失去焦点时将对其进行验证。表单有一个保存和重置按钮。重置按钮有immediate =“true”并且只是常规的ice:commandButton,即不是type =“reset”。

典型的inputText字段:

<ice:inputText id="input1" maxlength="6" size="6" value="#{client.inboxThreshold}" partialSubmit="true">
    <f:convertNumber integerOnly="true" />
    <f:validateLongRange minimum="0" />
</ice:inputText>

“重置”按钮:

<ice:commandButton value="Reset" style="margin-left:5px;" actionListener="#{client.reset}" immediate="true"/>

问题是这样的:当用户更改值并单击重置按钮时,将触发actionListener以更新支持bean值。删除了验证错误,但在呈现页面时,模型值不会更新。

阶段监听器指示它从Apply_Request_Values到Render_Response。所以,我认为我需要手动触发Update_model_values阶段。

想法?

2 个答案:

答案 0 :(得分:1)

我没试过,但听起来像是一个典型的阶段问题。简而言之,这意味着在actionListener中将bean值设置为过早的阶段。它们将被jsf组件的submitedValue覆盖。有两种可能的解决方案。

首先是绑定组件并通过setSubmittedValue直接在组件中设置所需的值。

更好的解决方案是第二个。您使用标记ice:setEventPhase(请参阅taglib)。使用它可以强制在稍后阶段调用actionListener,因此bean上的值不会被jsf组件上提交的值覆盖。

所以尝试用ice:commandButton围绕<ice:setEventPhase phase="INVOKE_APPLICATION">

PS:

  

阶段监听器指示它   从Apply_Request_Values到   Render_Response。所以,我认为我需要   手动触发   Update_model_values阶段。

这来自immediate="true"。有了它,ICEfaces在第二阶段(Apply_Request_Values)完成组件的所有阶段(在您的情况下为commandButton),然后将其他组件直接转到最后阶段(Render_Response)。因此,不调用其他组件的验证器。

我建议阅读有关阶段的内容(例如here,您也可以在“立即事件处理”部分找到有关紧急情况的详细信息)

答案 1 :(得分:0)

这是因为组件会显示提交的值,而不是您提供的数据,请参阅http://wiki.apache.org/myfaces/ClearInputComponents了解解决方案。