【问题标题】:Trouble implementing reset button in ICEfaces 1.8.2在 ICEfaces 1.8.2 中执行重置按钮时遇到问题
【发布时间】:2011-07-10 16:24:30
【问题描述】:

我有一个从数据库填充值的表单。该表单由多个带有 partialSubmit="true" 的 ice:inputText 组件组成,因此字段在失去焦点时将被验证。该表单有一个保存和一个重置按钮。重置按钮有 immediate="true" 并且只是一个普通的 ice:commandButton,也就是说,不是 type="reset"。

典型的输入文本字段:

<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 阶段。

想法?

【问题讨论】:

    标签: jsf icefaces


    【解决方案1】:

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

    首先是绑定组件,通过setSubmittedValue直接在组件中设置想要的值。

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

    所以试着用&lt;ice:setEventPhase phase="INVOKE_APPLICATION"&gt;包围ice:commandButton

    PS:

    相位监听器表明它是 从 Apply_Request_Values 到 渲染响应。所以,我想我需要 手动触发 Update_model_values 阶段。

    这来自immediate="true"。这样,ICEfaces 在第二阶段(Apply_Request_Values)中为组件(在您的情况下为commandButton)执行所有阶段,然后直接为其他组件执行最后阶段(Render_Response)。因此不会调用其他组件的验证器。

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

    【讨论】:

      【解决方案2】:

      这是因为组件会显示提交的值,而不是来自您的数据,解决方案见http://wiki.apache.org/myfaces/ClearInputComponents

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 2012-01-15
        • 2022-10-20
        • 2013-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多