【问题标题】:h:selectOneListbox + a4j:ajax not calling setterh:selectOneListbox + a4j:ajax 不调用 setter
【发布时间】:2012-10-25 20:44:54
【问题描述】:

我遇到了一个奇怪的问题,我有一个带有 h:selectOneListbox 的表单:

<h:selectOneListbox value="#{webHostingServicesActions.customPackage.storage}" size="1">
    <f:selectItem itemLabel="None" itemValue="#{null}" />
    <f:selectItems value="#{webHostingServicesActions.storagesChoices}" var="item" itemLabel="#{item.name}" />
    <f:converter converterId="productConverter" />
    <a4j:ajax event="valueChange" render="lblTotal" />
</h:selectOneListbox>

当我从 f:selectItems 中选择一项时,设置器 webHostingServicesActions.customPackage.storage 不会被调用。但是当我从 f:selectItem 中选择项目时,setter 会被正确调用。

当然我使用的是自定义转换器,但它已经过测试并且响应正确。

Every other ajax actions in the form seems blocked when an item from f:selectItems is selected.服务器端没有错误,在调试中使用 a4j:log 也没有错误。

EDIT 1 :当我从 f:selectItems 中选择一个项目时,会执行应用请求值的服务器端代码,但它会在二传手。我无法追踪到足够远的地方来查看正在发生的事情。

EDIT 2:我添加了 BalusC LifeCycleListener...

当我从 f:selectItem

中选择项目时
START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
END PHASE PROCESS_VALIDATIONS 3
START PHASE UPDATE_MODEL_VALUES 4
END PHASE UPDATE_MODEL_VALUES 4
START PHASE INVOKE_APPLICATION 5
END PHASE INVOKE_APPLICATION 5
START PHASE RENDER_RESPONSE 6
END PHASE RENDER_RESPONSE 6

当我从 f:selectItems

中选择一个项目时
START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
END PHASE PROCESS_VALIDATIONS 3
START PHASE RENDER_RESPONSE 6
END PHASE RENDER_RESPONSE 6

我也测试了 change 而不是 valueChange 并没有什么不同。

感谢您的帮助!

亚历山大。

【问题讨论】:

  • 您可以先将event="valueChange" 更改为event="change"valueChange 适用于 EditableValueHolder 组件(文本框等)。
  • 您是否还检查过请求处理生命周期是否通过了验证阶段?在应用请求值之后
  • 我添加了一个 是的,我收到了一个验证错误,现在我需要找到哪里,因为我没有使用任何验证器。 ..
  • Value not valid?或者到底是什么错误?
  • 验证消息只告诉该值无效,因此它不是很有帮助...但现在已修复,谢谢!

标签: jsf richfaces ajax4jsf


【解决方案1】:

现在我找到了解决方案,我对将转换器与 h:selectOneListbox 一起使用有一个误解。我在想转换器可用于从 f:selectItems 转换对象,反之亦然。

我已经稍微改回了我的代码:

<h:selectOneListbox value="#{webHostingServicesActions.selectedStorage}" size="1">
    <f:selectItem itemLabel="Aucun" itemValue="#{null}" />
    <f:selectItems value="#{webHostingServicesActions.storagesChoices}" var="item" itemLabel="#{item.name}" itemValue="#{item.keyProduct}" />
    <f:converter converterId="integerConverter" />
    <a4j:ajax event="valueChange" render="lblTotal" />
</h:selectOneListbox>

现在 setter selectedStorage 将收到一个 Integer 而不是对象 Product。一切正常。

感谢 kolossus 让我走上正确的道路和这篇文章:Object as itemValue in <f:selectItems>

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 2013-01-05
    • 1970-01-01
    • 2016-06-22
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多