【问题标题】:RichFaces: JSF Message disappears using a4j:supportRichFaces:JSF 消息使用 a4j 消失:支持
【发布时间】:2013-09-12 07:27:06
【问题描述】:

我正在取消 JSF 1.2 的 Richfaces 实现。 我要做的是在选中 selectBooleanCheckbox 时启用 selectOneRadio。 到目前为止它有效。但是有一个奇怪的效果:

考虑以下情况: 字段 selectA 在其 rich:message 标记中显示错误消息。 勾选 myCheckbox selectOneRadio 后 selectToReRender 已启用,但页面上所有富消息标签中的错误消息都消失了。

感谢您的帮助。

问候,

最大

<!-- Field which shows error-Message if vlaue was not entered -->
<h:selectOneRadio id="selectA" 
                  value ="#{controller.entity.valueA}"
                  required="true"
                  label="#{text['selectA.label']}"
                  layout="pageDirection">
    <f:selectItem itemValue="#{true}" itemLabel="Yes" />
    <f:selectItem itemValue="#{false}" itemLabel="No"/>
</h:selectOneRadio>

<rich:message for="selectA"/>



<!-- Field which enables selectOneRadio selectToReRender if it is checked -->
<h:selectBooleanCheckbox id="myCheckbox" 
                         label="#{text['myCheckbox.label']}"
                         value="#{controller.entity.valueB}" 
                         required="false">
    <a4j:support event="onclick" ajaxSingle="true" reRender="selectToReRender"/>
</h:selectBooleanCheckbox>
<rich:message for="myCheckbox"/>

<!-- Field which is disabled until myCheckbox is checked. 
     Function getSelectToReRenderDisabled() of controller checks the boolean value of controller.entity.valueB -->
<h:selectOneRadio id="selectToReRender"
                  value="#{controller.entity.valueC}"
                  label="#{text['selectToReRender.label']}"
                  layout="pageDirection"
                  required="true"
                  disabled="#{controller.selectToReRenderDisabled}">
    <f:selectItems value="#{MySelectItems.myEntitySelectItems}"
                   var="" />
</h:selectOneRadio>
<rich:message for="selectToReRender"/>

【问题讨论】:

    标签: ajax jsf richfaces jsf-1.2


    【解决方案1】:

    手册说,组件rich:message 支持“在没有&lt;a4j:outputPanel&gt; 帮助的情况下在Ajax 请求后自动重新渲染”。 所以这个组件会在每个 AJAX 请求中自动重新呈现。在您可以看到的属性列表中,ajaxRendered 的默认值设置为true

    因此您可以尝试将其设置为 false,但您必须注意在相关 AJAX 请求期间必须手动重新呈现它(例如,如果您的 selectA 支持 AJAX)。

    【讨论】:

    • 感谢您的快速回答。在&lt;rich:message for="selectA"/&gt; 中设置ajaxRendered="false" 无效。错误消息仍然消失。
    【解决方案2】:

    &lt;a4j:support/&gt; 中的&lt;a4j:support/&gt; 中的myCheckbox 表示选中该框时,仅提交myCheckbox 进行处理(某种)和验证。因此,在处理该请求期间,该表单中的所有其他组件以及任何相关的验证错误和消息都会被忽略。

    为确保在选择myCheckBox 时提交并验证整个表单,设置ajaxSingle="false" 或完全删除它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多